home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 26 / Cream of the Crop 26.iso / program / inter54c.zip / INTERRUP.K < prev    next >
Text File  |  1997-06-29  |  362KB  |  9,792 lines

  1. Interrupt List, part 11 of 16
  2. Copyright (c) 1989,1990,1991,1992,1993,1994,1995,1996,1997 Ralf Brown
  3. --------T-2F2700-----------------------------
  4. INT 2F - DR DOS 6.0 TaskMAX - INSTALLATION CHECK
  5.     AX = 2700h
  6. Return: AL = status
  7.         00h not installed
  8.         FFh installed
  9. Note:    the TaskMAX API is also supported by Novell DOS 7 TASKMGR in both
  10.       taskswitching and multitasking modes
  11. --------T-2F2701-----------------------------
  12. INT 2F - DR DOS 6.0 TaskMAX - GET STATUS
  13.     AX = 2701h
  14. Return: AX = maximum simultaneous tasks
  15.     BX = index into TASK_IDS of current foreground task
  16.     CX = currently-active tasks
  17.     DX = version number (DL = major, DH = minor)
  18.         (DR DOS 6.0 = 0001h, Novell DOS 7 = 0002h)
  19.     ES:SI -> TASK_IDS
  20.     ES:DI -> name table (array of 8-byte names, NUL-terminated if <8 chars)
  21. Notes:    do not attempt to create a new task if CX == AX
  22.     the task's index is its position on the task menu, while its ID is the
  23.       position within the internal task name table
  24. SeeAlso: AX=2714h,AX=2716h
  25. --------T-2F2702-----------------------------
  26. INT 2F - DR DOS 6.0 TaskMAX - GET PER-TASK EMS LIMIT
  27.     AX = 2702h
  28. Return: DX = maximum pages INT 67/AH=42h will report available
  29. Note:    TaskMAX does not limit EMS allocations other than by limiting the
  30.       amount which is reported as being available at a given time
  31. SeeAlso: AX=2703h,INT 67/AH=42h
  32. --------T-2F2703-----------------------------
  33. INT 2F - DR DOS 6.0 TaskMAX - SET PER-TASK EMS LIMIT
  34.     AX = 2703h
  35.     DX = maximum pages INT 67/AH=42h should report available
  36. Return: DX = new maximum for reporting
  37. Note:    the TaskMAX API is also supported by Novell DOS 7 TASKMGR in
  38.       both taskswitching and multitasking modes
  39. SeeAlso: AX=2702h,INT 67/AH=42h
  40. --------T-2F2704-----------------------------
  41. INT 2F - DR DOS 6.0 TaskMAX - REGISTER/UNREGISTER TASK MANAGER
  42.     AX = 2704h
  43.     DL = subfunction
  44.         00h unregister task manager
  45.         01h register task manager
  46. Return: DL = status
  47.         00h registered
  48.         01h unregistered
  49. Notes:    a task manager replaces TaskMAX's menu system with its own user
  50.       interface; while one is registered, the TaskMAX hotkeys and
  51.       Ctrl-Alt-Del invoke the manager rather than the built-in menu system
  52.     unregister the task manager before terminating it
  53. SeeAlso: AX=2705h
  54. Index:    hotkeys;TaskMAX
  55. --------T-2F2705-----------------------------
  56. INT 2F - DR DOS 6.0 TaskMAX - ENABLE/DISABLE DIRECT SWITCHING
  57.     AX = 2705h
  58.     DL = subfunction
  59.         00h disable keystrokes for switching to next/prev/specified task
  60.         01h enable
  61. Return: nothing
  62. Note:    should only be called by a registered task manager (see AX=2704h)
  63. SeeAlso: AX=2704h,AX=2706h
  64. --------T-2F2706-----------------------------
  65. INT 2F - DR DOS 6.0 TaskMAX - SWITCH TO SPECIFIED TASK
  66.     AX = 2706h
  67.     DX = task index (see AX=2701h) of task to be activated
  68. Return: DX = task index of previously-active task
  69. Note:    the TaskMAX API is also supported by Novell DOS 7 TASKMGR in
  70.       both taskswitching and multitasking modes
  71. SeeAlso: AX=2705h,AX=2707h,AX=2715h
  72. --------T-2F2707-----------------------------
  73. INT 2F - DR DOS 6.0 TaskMAX - CREATE NEW TASK
  74.     AX = 2707h
  75.     DS:DX -> ASCIZ pathname of executable
  76.     ES:BX -> parameter block (see #2386)
  77.     CX = number of ticks before automatic return to task manager
  78.         (0000h = run until termination or explicitly switched)
  79. Return: DX = new task's task index (FFFFh if task terminated)
  80. SeeAlso: AX=2706h,AX=2708h
  81.  
  82. Format of TaskMAX parameter block:
  83. Offset    Size    Description    (Table 2386)
  84.  00h    WORD    reserved, should be 0000h
  85.  02h    DWORD    pointer to command tail to be copied into child's PSP
  86.  06h    DWORD    pointer to first FCB to be copied into child's PSP
  87.  0Ah    DWORD    pointer to second FCB to be copied into child's PSP
  88. --------T-2F2708-----------------------------
  89. INT 2F - DR DOS 6.0 TaskMAX - DELETE TASK
  90.     AX = 2708h
  91.     DX = task index
  92. Return: DX = FFFFh (task deleted)
  93. Notes:    this call should only be used for abnormal task termination, after
  94.       first checking for open files with AX=270Ch; should not be used
  95.       with programs that allocate EMS or XMS memory
  96.     switches to specified task first
  97. SeeAlso: AX=2707h
  98. --------T-2F2709-----------------------------
  99. INT 2F - DR DOS 6.0 TaskMAX - NAME TASK
  100.     AX = 2709h
  101.     DX = task index
  102.     DS:SI -> 8-byte name (8 NULs = remove name)
  103. Return: AL = task flags
  104.         00h ID unused or task terminated
  105.         01h ID in use, task name table entry valid
  106.         81h ID in use, task name fixed
  107.     BX = task ID
  108.     ES:DI -> name in task name table (see AX=2701h)
  109. Note:    the task retains the given name until it terminates or the name is
  110.       removed by specifying a name of 8 NULs.
  111. SeeAlso: AX=2701h,AX=2707h
  112. --------T-2F270A-----------------------------
  113. INT 2F - DR DOS 6.0 TaskMAX - CONVERT TASK INDEX TO TASK ID
  114.     AX = 270Ah
  115.     DX = task index
  116. Return: DX = task ID (FFFFh if index invalid)
  117. Note:    task IDs stay constant, while indexes can change when other tasks are
  118.       deleted
  119. SeeAlso: AX=2701h,AX=270Bh
  120. --------T-2F270B-----------------------------
  121. INT 2F - DR DOS 6.0 TaskMAX - CONVERT TASK ID TO TASK INDEX
  122.     AX = 270Bh
  123.     DX = task ID
  124. Return: DX = task index (FFFFh if task not active)
  125. Note:    the TaskMAX API is also supported by Novell DOS 7 TASKMGR in both
  126.       taskswitching and multitasking modes
  127. SeeAlso: AX=270Ah
  128. --------T-2F270C-----------------------------
  129. INT 2F - DR DOS 6.0 TaskMAX - CHECK OPEN FILES
  130.     AX = 270Ch
  131.     DX = task index
  132. Return: AX = number of files currently open for specified task
  133. SeeAlso: AX=2708h
  134. --------T-2F270D-----------------------------
  135. INT 2F - DR DOS 6.0 TaskMAX - CHECK IF TASK RUNNING PRIMARY COMMAND INTERPRETER
  136.     AX = 270Dh
  137.     DX = task index
  138. Return: DX = status
  139.         0000h if primary command interpreter (COMMAND.COM, etc.) running
  140.         0001h if not in root shell for task
  141. Note:    TaskMAX will return 0001h if the specified task has spawned another
  142.       command interpreter with AX=2707h
  143. SeeAlso: AX=2707h,AX=270Ch
  144. --------T-2F270E-----------------------------
  145. INT 2F - DR DOS 6.0 TaskMAX - GET/SET TEXT PASTE LEAD-IN
  146.     AX = 270Eh
  147.     CX = length of string (max 15 keystrokes, 0000h to get current string)
  148.     DS:SI -> pasting lead-in string (character/scan-code pairs)
  149. Return: ES:DI -> current lead-in string
  150. Note:    the specified sequence of keystrokes is sent to the application before
  151.       every line of a text-mode spreadsheet paste
  152. SeeAlso: AX=270Fh,AX=2710h,AX=2713h
  153. --------T-2F270F-----------------------------
  154. INT 2F - DR DOS 6.0 TaskMAX - GET/SET NUMERIC PASTE LEAD-IN
  155.     AX = 270Fh
  156.     CX = length of string (max 15 keystrokes, 0000h to get current string)
  157.     DS:SI -> pasting lead-in string (character/scan-code pairs)
  158. Return: ES:DI -> current lead-in string
  159. Note:    the specified sequence of keystrokes is sent to the application before
  160.       every number in a numeric-mode spreadsheet paste
  161. SeeAlso: AX=270Eh,AX=2710h,AX=2711h,AX=2713h
  162. --------T-2F2710-----------------------------
  163. INT 2F - DR DOS 6.0 TaskMAX - GET/SET PASTE LINE TERMINATOR STRING
  164.     AX = 2710h
  165.     CX = length of string (max 15 keystrokes, 0000h to get current string)
  166.     DS:SI -> pasting terminator string (character/scan-code pairs)
  167. Return: ES:DI -> current terminator string
  168. Note:    the specified sequence of keystrokes is sent to the application after
  169.       every line of a spreadsheet paste operation
  170. SeeAlso: AX=270Eh,AX=270Fh,AX=2713h
  171. --------T-2F2711-----------------------------
  172. INT 2F - DR DOS 6.0 TaskMAX - GET/SET NUMERIC PASTE DECIMAL POINT
  173.     AX = 2711h
  174.     DX = ASCII code for separator (FFFFh to get current)
  175. Return: DL = current separator character
  176. SeeAlso: AX=270Fh
  177. --------T-2F2712-----------------------------
  178. INT 2F - DR DOS 6.0 TaskMAX - INITIATE EXPORTING TASK DATA
  179.     AX = 2712h
  180.     DX = task index
  181. --------T-2F2713-----------------------------
  182. INT 2F - DR DOS 6.0 TaskMAX - INITIATE PASTE OPERATION
  183.     AX = 2713h
  184.     DX = task index
  185.     CX = paste mode
  186.         0000h alphanumeric
  187.         0001h numeric
  188.         0002h text
  189. SeeAlso: AX=270Eh,AX=270Fh,AX=2710h,AX=2711h
  190. --------T-2F2714-----------------------------
  191. INT 2F - DR DOS 6.0 TaskMAX - GET SWAP SPACE INFO
  192.     AX = 2714h
  193. Return: CX = total KB of swap space
  194.     DX = available KB of swap space
  195. Note:    the TaskMAX API is also supported by Novell DOS 7 TASKMGR in both
  196.       taskswitching and multitasking modes
  197. SeeAlso: AX=2701h
  198. --------T-2F2715-----------------------------
  199. INT 2F - DR DOS 6.0 TaskMAX - SWITCH TO TASK MANAGER
  200.     AX = 2715h
  201. Return: only after calling task is again selected
  202. SeeAlso: AX=2706h
  203. --------T-2F2716-----------------------------
  204. INT 2F - DR DOS 6.0 TaskMAX - GET PASTE BUFFER STATUS
  205.     AX = 2716h
  206. Return: AX = 0000h if AX=2716h,AX=2717h,AX=2718h supported
  207.         CX = bytes in paste buffer
  208.         DX = current generation number (updated after every copy operation)
  209. BUG:    Novell DOS 7 TASKMGR returns AX=0000h even though it does not support
  210.       this call (it does support the remainder of the TaskMAX API)
  211. SeeAlso: AX=2701h,AX=2713h,AX=2714h,AX=2717h,AX=2718h
  212. --------T-2F2717-----------------------------
  213. INT 2F - DR DOS 6.0 TaskMAX - PASTE DATA DIRECTLY TO APPLICATION BUFFER
  214.     AX = 2717h
  215.     CX = bytes in destination buffer
  216.     ES:DI -> destination buffer
  217. Return: AX = 0000h if function supported
  218.         CX = bytes actually copied (FFFFh if buffer too small)
  219.         DX = current generation number for paste buffer
  220. BUG:    Novell DOS 7 TASKMGR returns AX=0000h even though it does not support
  221.       this call (it does support the remainder of the TaskMAX API)
  222. Note:    the destination buffer may be too small if another task adds more data
  223.       to the paste buffer after the AX=2716h call but before this call
  224. SeeAlso: AX=2713h,AX=2716h,AX=2718h
  225. --------T-2F2718-----------------------------
  226. INT 2F - DR DOS 6.0 TaskMAX - COPY DATA DIRECTLY INTO PASTE BUFFER
  227.     AX = 2718h
  228.     CX = bytes in source buffer
  229.     DS:SI -> source buffer (plain ASCII, lines terminated with CR LF)
  230. Return: AX = 0000h if function supported
  231.         CX = bytes actually copied
  232.         DX = current generation number for paste buffer
  233. BUG:    Novell DOS 7 TASKMGR returns AX=0000h even though it does not support
  234.       this call (it does support the remainder of the TaskMAX API)
  235. SeeAlso: AX=2712h,AX=2716h,AX=2717h
  236. --------T-2F2719-----------------------------
  237. INT 2F - Novell DOS 7 TaskMGR - NOP
  238.     AX = 2719h to 271Bh
  239. --------T-2F271C-----------------------------
  240. INT 2F U - Novell DOS 7 TaskMGR - ???
  241.     AX = 271Ch
  242.     DX = ???
  243.         bit 0: ???
  244. Return: ???
  245.     ---if DX bit 0 set---
  246.     AX = 0031h
  247.     CX = 0000h
  248. BUG:    if the task switcher is running, and DX bit 0 is set on call, this
  249.       function will crash because its exit code attempts to pop several
  250.       registers which are not pushed when DX bit 0 is set
  251. --------m-2F2780CL01-------------------------
  252. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API - SUPERVISOR MODULE
  253.     AX = 2780h
  254.     CL = 01h (module: Supervisor)
  255.     CH = subfunction
  256.         00h unused
  257.         Return: CX = status (0002h) (see #2387)
  258.         01h unused
  259.         Return: CX = status (0002h) (see #2387)
  260.         02h "Z_ModuleReg" register an OS module
  261.         EBX = module number (0005h-000Fh)
  262.         DS:EDX -> module descriptor (see #2389)
  263.         Return: CX = status (0000h,0030h) (see #2387)
  264.         03h allocate SYSDAT memory
  265.         DX = number of ??? to allocate
  266.         Return: CX = status (0000h,0003h) (see #2387)
  267.         04h get selector to SYSDAT
  268.         Return: CX = 0000h (successful)
  269.             BX = selector for EMM386 data segment
  270.             EBX high word cleared
  271.         05h "Z_MoveReal" relocate segment into extended memory
  272.         DS:EDX -> descriptor parameter block
  273.         Return: ECX = status (00h,03h,31h,32h) (see #2387)
  274.             ---if successful---
  275.             parameter block filled
  276.         06h "Z_Reboot" return to real mode via triple fault
  277.         07h debugger break
  278.         Note:    calls INT 03, then INT 21/AH=02h to output a question
  279.               mark
  280.         08h "X_ForeCheck" check if domain is in foreground
  281.         Return: CX = 0000h (successful)
  282.             EBX = ??? (0 or 2)
  283.         09h register VxD with system
  284.         0Ah unload VxD hook
  285.         0Bh indicate end of initialization phase
  286.         Return: CX = status (0002h) (see #2387)
  287.         0Ch "F_AllocWindow" allocate 4K mapping window
  288.         0Dh "F_RegisterBoot" register reboot addresses
  289.         EBX = ???
  290.         EDX = ???
  291.         Return: ???
  292.         0Eh "F_EnquireBoot" check if reboot active
  293.         Return: CX = 0000h (successful)
  294.             BL = ???     \ or BX = 0000h
  295.             BH = ???     /
  296.         0Fh get debugging level
  297.         Return: CX = 0000h (successful)
  298.             EBX = new value for debugging level
  299.         10h set debugging level
  300.         EDX = ???
  301.         Return: CX = 0000h (successful)
  302.             EBX = old value of debugging level
  303.         11h installation check (documented)
  304.         Return: CX = status
  305.                 0000h if multitasker is installed
  306.                 EBX = version (0100h for v1.00)
  307.                 1101h if multitasker is not present
  308.         12h "F_V86BPInstall" install V86 breakpoint
  309.         DX = ???
  310.         Return: CX = 0000h (successful)
  311.             AX = old value of ???
  312.         13h "F_V86BPRemove" remove V86 breakpoint
  313.         Return: CX = status (0000h,003Fh) (see #2387)
  314.             AX = ???
  315.         14h "F_V86BPOffer" indicate INT 03 to be used as V86 breakpoint
  316.         EDX = linear address ??? of INT 03 instruction for breakpoint
  317.         Return: CX = status (0000h,003Fh) (see #2387)
  318.         15h "F_LoaderCleanup" offer opportunity to clean up
  319.         BX = segment of ???
  320.         Return: CX = 0000h (successful)
  321.             BX = segment of ???
  322.         16h "F_RegisterVxDWindow" register VxD mapping window
  323.         17h "F_RegisterPNW" register Personal NetWare information
  324.         EBX = subfunction (0-2)
  325.         Return: CX = status (0002h if EBX>2) (see #2387)
  326.             ???
  327.         18h unused
  328.         Return: CX = status (0002h) (see #2387)
  329. Return: CX = status (most subfunctions)
  330.     (E)AX and/or (E)BX contain return values, depending on function
  331. Notes:    called by DPMS.EXE and EMM386.EXE
  332.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  333.       because the request is handled on the initial trap to the memory
  334.       manager caused by INT instructions, this API must be invoked with
  335.       an actual INT 2F instruction instead of some simulation such as a
  336.       far call to the address in the interrupt vector table
  337. SeeAlso: AX=12FFh/BX=0EDCh,AX=2780h/CL=02h,AX=2780h/CL=03h,AX=2780h/CL=04h
  338.  
  339. (Table 2387)
  340. Values for Novell DOS 7 EMM386 function status:
  341.  0000h    successful
  342.  0001h    not implemented
  343.  0002h    invalid subfunction
  344.  0003h    unable to find memory
  345.  0004h    invalid flag (semaphore) number
  346.  0005h    flag (semaphore) overrun
  347.  0006h    flag (semaphore) underrun
  348.  0007h    no queue handles available
  349.  0009h    no queue buffers available
  350.  000Ah    queue is in use
  351.  000Bh    invalid process handle
  352.  000Ch    no process handles available
  353.  000Dh    queue access not permitted
  354.  000Eh    queue is empty
  355.  000Fh    queue is full
  356.  0012h    no memory handles available
  357.  0014h    can't find process in process list
  358.  001Bh    invalid memory handle
  359.  0023h    unable to terminate process
  360.  002Ah    flag set ignored
  361.  002Dh    no more system flags
  362.  002Eh    flag (semaphore) not in idle state
  363.  002Fh    flag (semaphore) wait timed out
  364.  0030h    bad module number in CL
  365.  0031h    bad descriptor
  366.     invalid value for DESC_PB_SINFO in a descriptor parameter block
  367.  0032h    no free descriptors
  368.  0033h    error while locking/unlocking a page
  369.  0034h    error getting or setting a page
  370.  0035h    no pages available
  371.  0036h    invalid domain
  372.  0037h    process already frozen
  373.  0038h    process not frozen
  374.  0039h    fork failure (no registered swaplist)
  375.  003Ah    page already free
  376.  003Bh    page already allocated
  377.  003Ch    unable to switch tasks
  378.  003Dh    attempted to free critical section which is not active
  379.  003Eh    too many active critical sections
  380.  003Fh    ???
  381.  41FFh    current domain is invalid, or no domain in context
  382.  42FFh    domain ID is not a valid descriptor
  383.  43FFh    domain creation still in progress
  384.  44FFh    domain currently being deleted
  385.  45FFh    task manager is busy, cannot unload it
  386.  46FFh    task manager already loaded
  387.  47FFh    task manager not yet loaded
  388.  48FFh    cannot save/restore because prior switch not complete
  389.  49FFh    console already has owner
  390.  4BFFh    unsupported opcode
  391.  4CFFh    32-bit address prefix not supported
  392.  4FFFh    timeout, but not on timer queue
  393.  50FFh    unable to lock timer queue
  394.  53FFh    unable to switch while in Global Message Mode
  395.  54FFh    error while setting Global Message Mode
  396.  55FFh    not in Global Message Mode
  397.  56FFh    system already in Domain Message Mode
  398.  57FFh    not in Domain Message Mode
  399.  58FFh    unable to allocate timeout structure
  400.  59FFh    unsupported video type
  401.  5AFFh    function not handled by any VM
  402.  5BFFh    error in Serial..Set call
  403.  5CFFh    error in Parallel..Set call
  404.  5DFFh    domain list overflowed
  405.  5FFFh    unable to free domain while in nobuffers mode
  406.  
  407. Format of Novell DOS/OpenDOS EMM386 descriptor parameter block:
  408. Offset    Size    Description    (Table 2388)
  409.  00h    DWORD    "DESC_PB_BASE"
  410.  04h    DWORD    "DESC_PB_LIMIT"
  411.  08h    WORD    "DESC_PB_SEL"
  412.  0Ah    BYTE    "DESC_PB_MINFO"
  413.  0Bh    BYTE    "DESC_PB_SINFO"
  414. SeeAlso: #2389
  415.  
  416. Format of Novell DOS/OpenDOS EMM386 module descriptor:
  417. Offset    Size    Description    (Table 2389)
  418.  00h 12 BYTEs    descriptor parameter block (see #2388)
  419.  0Ch    DWORD    -> module entry point
  420. Note:    for function "Z_ModuleReg", only DESC_PB_SEL and the module entry point
  421.       need to be initialized before calling EMM386
  422. SeeAlso: #2388
  423. --------m-2F2780CL02-------------------------
  424. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API - REAL-TIME MONITOR
  425.     AX = 2780h
  426.     CL = 02h (module: Real-Time Monitor)
  427.     CH = subfunction
  428.         00h ???
  429.         ???
  430.         Return: CX = status (0000h,0023h, others???) (see #2387)
  431.             BX = ??? (0000h if CX=0000h, FFFFh if CX=0023h)
  432.         Note:    calls func 04h/sf 03h, func 04h/sf 1Eh,func 02h/sf 43h,
  433.               func 02h/sf 0Bh, and func 04h/sf 01h
  434.         01h "Z_PCountGet" get and clear count of dispatches
  435.         DX = ??? handle or 0000h for default
  436.         Return: CX = status (0000h,000Bh) (see #2387)
  437.             EBX = old value of ??? if successful
  438.             EDX destroyed
  439.         02h "Z_FlagWait" wait on semaphore
  440.         DX = index of semaphore???
  441.         Return: CX = status (0000h,0004h,0005h) (see #2387)
  442.             EBX = 0000FFFFh on error, 00000000h if successful
  443.         03h "Z_FlagSet" set a semaphore flag
  444.         DX = index of semaphore???
  445.         Return: CX = status (0000h,0004h,0006h) (see #2387)
  446.             BX = FFFFh on error, 0000h if successful
  447.         04h "X_QCreate" create a new queue
  448.         Return: CX = status (0000h,0007h,000Ah) (see #2387)
  449.         05h "X_QOpen" open queue for reading/writing
  450.         EDX -> ??? data (first 8 bytes seem to be name)
  451.         Return: CX = status (0000h,0009h,000Dh) (see #2387)
  452.         06h "X_QDelete" delete a queue
  453.         Note:    calls fn 02h/subfn 05h, then fn 02h/subfn 40h
  454.         07h "X_QRead" read message from queue
  455.         EDX = ???
  456.         Return: CX = status (0000h,0009h,000Eh) (see #2387)
  457.         08h "X_QReadC" read message from queue, if any
  458.         EDX = ???
  459.         Return: CX = status (0000h,0009h,000Eh) (see #2387)
  460.         09h "X_QWrite" write message to queue
  461.         EDX = ???
  462.         Return: CX = status (0000h,0009h,000Fh) (see #2387)
  463.         0Ah "X_QWriteC" write message to queue, if space available
  464.         EDX = ???
  465.         Return: CX = status (0000h,0009h,000Fh) (see #2387)
  466.         0Bh "X_PDelay" put process to sleep for specified period
  467.         DX = number of clock ticks to sleep???
  468.         Return: CX = 0000h (successful)
  469.         0Ch "X_PDispatch" force a dispatch (run scheduler)
  470.         Return: CX = 0000h (successful)
  471.         0Dh "F_PTerm" terminate process???
  472.         Return: CX = status (0000h,0023h) (see #2387)
  473.             BX = FFFFh on error, 0000h if successful
  474.         Note:    calls fn 04h/subfn 03h, fn 04h/subfn 1Eh,
  475.               fn 02h/subfn 43h, fn 02h/subfn 0Bh, fn 04h/sub 01h
  476.         0Eh "X_PCreate" create new process
  477.         ???
  478.         Return: CX = status (0000h,000Ch) (see #2387)
  479.             EBX = ??? if successful
  480.         0Fh "Z_PPriorSet" set process priority
  481.         BX = ???
  482.         DX = ??? handle or 0000h for default
  483.         Return: CX = status (0000h,000Bh) (see #2387)
  484.         10h "X_PHandleGet" get current process handle
  485.         Return: CX = 0000h (successful)
  486.             BX = handle of default ???
  487.             EBX high word cleared
  488.         11h "X_PTerm" terminate process
  489.         DX = process handle or 0000h for current
  490.         BX = ??? (handle???)
  491.         Return:    CX = status (0000h,000Bh,0014h) (see #2387)
  492.         12h "F_Sleep" ???
  493.         BX = ???
  494.         DX = ???
  495.         Return: CX = 0000h (successful)
  496.         13h "F_Wakeup" ???
  497.         DX = ???
  498.         Return: CX = status (see #2387)
  499.         14h "F_FindPDName" find process by name???
  500.         BX = ???
  501.         DX = ???
  502.         Return: CX = status (0000h,0014h) (see #2387)
  503.             BX = FFFFh on error, ??? if successful
  504.         15h "F_SetFlags" set ??? flags
  505.         BX = ??? (low two bits only)
  506.         DX = ??? handle or 0000h for default
  507.         Return: CX = status (0000h,000Bh) (see #2387)
  508.             BX = new value of ??? flags (entire word)
  509.             EBX high register cleared
  510.         16h "F_EndOfInterrupt" issue EOI to PIC
  511.         Return: CX = 0000h (successful)
  512.         17h "X_PTermOff" disable process termination
  513.         18h "X_PTermOK" enable process termination
  514.         19h "Z_FlagStatusGet" get semahprore's status
  515.         1Ah "F_QRdMX" ???
  516.         1Bh "F_QWrMX" ???
  517.         1Ch "Z_FlagAlloc" allocate a new semaphore
  518.         1Dh "Z_FlagFree" free semaphore
  519.         1Eh "X_FlagsMaxGet" get number of semaphores supported
  520.         1Fh "X_QReadNDC" non-destructive read from queue (peek)
  521.         20h "Z_FlagWWTO" wait on semaphore, with timeout
  522.         21h "F_UdaAlloc" ???
  523.         22h "F_UdaFree" ???
  524.         23h "X_PSuspend" suspend process
  525.         24h "X_PUnsuspend" restart process after suspension
  526.         25h "X_CritEnter" enter critical region
  527.         26h "X_CritExit" leave critical region
  528.         27h "F_PCreate" ???
  529.         28h "Z_PHandleListGet" get list of process handles
  530.         29h "Z_PNameGet" get process name
  531.         2Ah "Z_PStatusGet" get process status
  532.         2Bh "F_PDToDomain" get process' domain???
  533.         2Ch "Z_PPriorGet" get process priority
  534.         2Dh "F_QDList" get list of queues???
  535.         2Eh "Z_QNameGet" get queue's name
  536.         2Fh "X_QMsgLenGet" get message length of queue
  537.         30h "X_QMsgMaxGet" get message capacity of queue
  538.         31h "Z_QWriterGet" get handle of process waiting to write queue
  539.         32h "Z_QReaderGet" get handle of process waiting to read queue
  540.         33h "X_QMsgNumGet" get number of messages in queue
  541.         34h "Z_QFlagsGet" get queue's flags
  542.         35h "F_NameToQD" get queue by name???
  543.         36h "F_NameToPD" get process by name???
  544.         37h "X_MXCreate" create a mutex
  545.         38h "X_MXDelete" delete a mutex
  546.         39h "X_MXEnter" enter mutual-exclusion zone
  547.         3Ah "X_MXEnterC" enter mutual-exclusion zone if it is free
  548.         3Bh "X_MXExit" leave mutual-exclusion zone
  549.         3Ch "Z_TicksSet" set length of foreground time slices
  550.         3Dh "X_TickGet" get clock tick period
  551.         3Eh "F_ProcessID" ???
  552.         3Fh "X_QClose" close a queue
  553.         40h "F_QDispose" delete queue???
  554.         41h "F_PDToFlags" get process flags???
  555.         42h "F_PDToDParam" ???
  556.         43h "F_ReleaseMX" release mutex???
  557.         44h "F_SimulateInt" ???
  558.         45h "Z_QFlagsSet" set queue's flags
  559.         46h "F_TickRate" ???
  560.         47h ???
  561. Return: CX = status (most subfunctions)
  562.     (E)AX and/or (E)BX contain return values, depending on function
  563. Notes:    called by DPMS.EXE and EMM386.EXE
  564.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  565.       because the request is handled on the initial trap to the memory
  566.       manager caused by INT instructions, this API must be invoked with
  567.       an actual INT 2F instruction instead of some simulation such as a
  568.       far call to the address in the interrupt vector table
  569. SeeAlso: AX=12FFh/BX=0EDCh,AX=2780h/CL=01h,AX=2780h/CL=03h,AX=2780h/CL=04h
  570. --------m-2F2780CL03-------------------------
  571. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API - MEMORY
  572.     AX = 2780h
  573.     CL = 03h (module: Memory)
  574.     CH = subfunction
  575.         00h ???
  576.         01h "F_PdirGet" ???
  577.         02h "F_PdirSet" ???
  578.         03h "Z_PageAlloc" allocate a given page of memory
  579.         04h "F_PageAllocG" allocate global page???
  580.         05h "F_PageAllocI" allocate instance page???
  581.         06h "F_PtblRead" get page table???
  582.         07h "F_PtrlWrite" select page table???
  583.         08h "Z_PtblGet" read page table
  584.         09h "Z_PtblSet" change page table
  585.         0Ah "Z_PagesAlloc" allocate pages of memory
  586.         0Bh "Z_PageFree" free a given page of memory
  587.         0Ch "Z_MemAlloc" allocate a memory block
  588.         0Dh "Z_MemFree" release memory block
  589.         0Eh "Z_MemSizeGet" get size of memory block
  590.         0Fh "Z_MemResize" resize a memory block
  591.         10h "Z_DescAlloc" allocate a memory descriptor
  592.         11h "Z_DescFree" release a memory descriptor
  593.         12h "Z_DescGet" get details on memory descriptor
  594.         13h "Z_DescSet" set a memory descriptor
  595.         14h "Z_MemDescAlloc" allocate a memory block and its descriptor
  596.         15h "Z_MemDescFree" release a memory block and its descriptor
  597.         16h "Z_MemDescSizeGet" get size of memory block
  598.         17h "Z_MemDescResize" resize a memory block
  599.         18h "Z_PageLock" lock a page, with existing contents
  600.         19h "Z_PageUnlock" unlock a page
  601.         1Ah "Z_PageLockAny" lock a page, contents undefined
  602.         1Bh "Z_PageUnlockReuse" unlock page, reuse phsyical memory
  603.         1Ch "Z_PageLockNone" lock a page, no physical memory assigned
  604.         1Dh "Z_PageUnlockNone" unlock a page, don't reuse physical memory
  605.         1Eh "F_CallRealRaw" call real mode (SS:ESP supplied)
  606.         1Fh "F_IntRealRaw" perform real-mode interrupt (SS:ESP supplied)
  607.         20h "F_CallReal" call real mode with RETF frame
  608.         21h "F_IntReal" perform real-mode interrupt
  609.         22h "F_PagedCallReal" paged real-mode call
  610.         23h "F_PagedIntReal" paged real-mode interrupt
  611.         24h "F_CallIretReal" call real mode with IRET frame
  612.         25h "F_CallIretRealRaw" call real mode with IRET (SS:ESP supplied)
  613.         26h "F_CallProt16" call 16-bit protected-mode code
  614.         27h "F_CallProt32" call 32-bit protected-mode code
  615.         28h "F_IAddPage" add kernel instance data
  616.         29h "Z_PageDomLock" lock page in specific domain, preserve contents
  617.         2Ah "Z_PatgeDomUnlock" unlock page in specific domain
  618.         2Bh "Z_PageDomLockAny" lock page in specific domain, undef contents
  619.         2Ch "Z_PageDomUnlockReuse" unlock page in spec. domain,reuse ph.mem
  620.         2Dh "Z_PageDomLockNone" lock page in spec. domain, no phys memory
  621.         2Eh "Z_PageDomUnlockNone" unlock page in spec. domain, no phys. mem
  622.         2Fh "Z_GateAlloc" allocate a gate
  623.         30h "Z_GateFree" release a gate
  624.         31h "X_MemFreeGet" get total free memory
  625.         32h "X_MemTopGet" get highest memory address
  626.         33h "X_MemTotalGet" get total memory size
  627.         34h "F_DescRead" ???
  628.         35h "F_DescWrite" ???
  629.         36h "F_GetStack" ???
  630.         37h "F_SetStack" ???
  631. Return: CX = status (most subfunctions)
  632.     (E)AX and/or (E)BX contain return values, depending on function
  633. Notes:    called by DPMS.EXE and EMM386.EXE
  634.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  635.       because the request is handled on the initial trap to the memory
  636.       manager caused by INT instructions, this API must be invoked with
  637.       an actual INT 2F instruction instead of some simulation such as a
  638.       far call to the address in the interrupt vector table
  639. SeeAlso: AX=12FFh/BX=0EDCh,AX=2780h/CL=01h,AX=2780h/CL=02h,AX=2780h/CL=04h
  640. --------m-2F2780CL04-------------------------
  641. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API - DOMAINS
  642.     AX = 2780h
  643.     CL = 04h (module: Domains)
  644.     CH = subfunction
  645.         00h "F_DAlloc" create new domain
  646.         01h "F_DFree" delete a domain
  647.         02h "X_DomHandleGetMy" get current domain handle
  648.         03h "F_DSet" switch to another domain
  649.         04h "Z_HandlerSWInt" install software-interrupt handler
  650.         05h "Z_HandlerPageFault" install page-fault handler
  651.         06h "Z_HandlerIOEx" install I/O exception handler
  652.         07h "Z_HandlerGenEx" install general exception handler
  653.         08h "Z_HandlerHWInt" install hardware interrupt handler
  654.         09h "Z_IOBitmapGet" get current domain's I/O bitmap entry
  655.         0Ah "Z_IOBitmapSet" set current domain's I/O bitmap entry
  656.         0Bh "Z_IOBitmapDomGet" get domain's I/O bitmap entry
  657.         0Ch "Z_IOBitmapDomSet" set domain's I/O bitmap entry
  658.         0Dh "Z_DomMemRead" read memory in another domain
  659.         0Eh "Z_DomMemWrite" write memory in another domain
  660.         0Fh "Z_PtblDomGet" read domain's page table
  661.         10h "Z_PtblDomSet" write domain's page table
  662.         11h "Z_InstanceSet" register instanced memory
  663.         12h "X_DomNProcessesGet" get number of processes in domain
  664.         13h "X_DomSuspend" suspend a domain
  665.         14h "Z_DomUnsuspend" resume execution of a domain
  666.         15h "Z_DomFork" make a copy of the current domain
  667.         16h "Z_DomTerm" terminate domain and all processes in it
  668.         17h "Z_HandlerUnlink" remove a handler
  669.         18h "Z_HandlerHWIntDflt" install default hardware interrupt handler
  670.         19h "Z_HandlerVHWInt" install virtual hardware interrupt handler
  671.         1Ah "Z_HandlerVHWIntDflt" install default virtual hware int handler
  672.         1Bh "Z_HandlerSwapIn" install swap-in handler
  673.         1Ch "Z_HandlerSwapOut" install swap-out handler
  674.         1Dh "Z_EndOfInterrupt" signal EOI
  675.         1Eh ???
  676.         1Fh "Z_HandlerPCreate" install process-creation handler
  677.         20h "Z_HandlerPTerm" install process-termination handler
  678.         21h "Z_DomRootProcessGet" get domain's root process' handle
  679.         22h "F_DForeground" domain has just switched to foreground
  680.         23h "F_DBackground" domain has just switched to background
  681.         24h "F_MapHMA" map domain's HMA
  682.         25h "F_AddInstData" add DOS instance data
  683.         26h "X_DomMemFreeGet" get free memory in a domain
  684.         27h "X_DomMemUsedGet" get memory used by current domain
  685.         28h "Z_DomMemMaxGet" get per-domain memory limit
  686.         29h "Z_DomMemMaxSet" set per-domain memory limit
  687.         2Ah "F_ReflectInt21" protected-mode INT 21 support
  688.         2Bh "Z_DomHandleGet" get domain for a process
  689.         2Ch ???
  690.         2Dh ???
  691.         2Eh ???
  692.         2Fh ???
  693.         30h ???
  694.         31h ???
  695.         32h ???
  696. Return: CX = status (most subfunctions)
  697.     (E)AX and/or (E)BX contain return values, depending on function
  698. Notes:    called by DPMS.EXE and EMM386.EXE
  699.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  700.       because the request is handled on the initial trap to the memory
  701.       manager caused by INT instructions, this API must be invoked with
  702.       an actual INT 2F instruction instead of some simulation such as a
  703.       far call to the address in the interrupt vector table
  704. SeeAlso: AX=12FFh/BX=0EDCh,AX=2780h/CL=01h,AX=2780h/CL=02h,AX=2780h/CL=03h
  705. --------m-2F2780CL05-------------------------
  706. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API - VIRTUAL MACHINES
  707.     AX = 2780h
  708.     CL = 05h (module: VM)
  709.     CH = function
  710.         00h "F_VMProtInit" internal protected-mode initialization
  711.         01h "Z_TMLoad" load task manager
  712.         02h "Z_TMUnload" unload task manager
  713.         03h    "Z_VMBackSet" send virtual machine to background
  714.         04h "Z_VMForeSet" send virtual machine to foreground
  715.         05h "Z_VMSaveEnable" enable saving virtual machine
  716.         06h "Z-VMSaveDisable" disable saving virtual machine
  717.         07h "Z_TMInit" intialize task manager
  718.         08h "Z_TMHotKeyGet" get task manager hotkey
  719.         09h "Z_TMHitKeyEnable" restart scanning for task manager key
  720.         0Ah "Z_TMHotKeyDisable" stop scanning for task manager key
  721.         0Bh "X_ForeGet" get current foreground domain
  722.         0Ch "F_DMAHandlerEnable" (re)enable DMA address translation
  723.         0Dh "F_DMAHandlerDisable" disable DMA address translation
  724.         0Eh "Z_SerialTimeoutGet" set serial port timeout
  725.         0Fh "Z_ParallelTimeoutSet" set parallel port timeout
  726.         10h "F_VCPIEntry" domain is entering VCPI mode
  727.         11h "F_VCPIExit" domain is leaving VCPI mode
  728.         12h "X_MsgGlobalEnter" enter Global Message Mode
  729.         13h "X_MsgGlobalDisplay" display global message
  730.         14h "X_MsgGlobalExit" leave Global Message Mode
  731.         15h "X_MsgDomEnter" enter Domain Message Mode
  732.         16h "X_MsgDomDisplay" display domain-specific message
  733.         17h "X_MsgDomExit" leave Domain Message Mode
  734.         18h "X_MsgFatalDisplay" display fatal error message
  735.         19h "Z_SerialBaseSet" set serial port address
  736.         1Ah "Z_ParallelBaseSet" set parallel port address
  737.         1Bh "Z_SerialIRQSet" set serial port IRQ
  738.         1Ch "Z_ParallelIRQSet" set parallel port IRQ
  739.         1Dh "F_ResetVideo" emergency video system reset
  740.         1Eh "F_SetMouseIRQ" set which IRQ is used by mouse
  741.         1Fh "F_CheckNotIdle" check whether system is idle
  742.         20h "F_GetMouseInfo"
  743.         21h "Z_SerialOwnerGet" get serial port owner
  744.         22h "Z_SerialTimeoutGet" get serial port timeout
  745.         23h "Z_ParallelOwnerGet" get parallel port owner
  746.         24h "Z_ParallelTimeoutGet" get parallel port timeout
  747.     ???
  748. Return: ???
  749. Notes:    called by DPMS.EXE and EMM386.EXE
  750.     the handler for this function may be set by one of the subfunctions
  751.       of AX=2780h/CL=01h; the default handler returns AX=BX=FFFFh and
  752.       CX=0001h (see #2387)
  753.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  754.       because the request is handled on the initial trap to the memory
  755.       manager caused by INT instructions, this API must be invoked with
  756.       an actual INT 2F instruction instead of some simulation such as a
  757.       far call to the address in the interrupt vector table
  758. SeeAlso: AX=12FFh/BX=0EDCh,AX=2780h/CL=01h,AX=2780h/CL=02h,AX=2780h/CL=03h
  759. --------m-2F2780CL06-------------------------
  760. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API - DPMI SERVICES
  761.     AX = 2780h
  762.     CL = 06h
  763.     CH = function
  764.         00h "F_InitDPMI" used for internal initialization
  765.         01h "F_DescAllocLDT" allocate LDT descriptor
  766.         02h "F_DescFreeLDT" free LDT descriptor
  767.         03h "F_DescGetLDT" get details on LDT descriptor
  768.         04h "F_DescSetLDT" set up LDT descriptor
  769.         05h "F_DescAllocInt21" allocate descriptor for PM INT 21
  770.         06h "F_WhereIsDPMI" get address of DPMI global data
  771. Return: ???
  772. Notes:    called by DPMS.EXE and EMM386.EXE
  773.     the handler for this function may be set by one of the subfunctions
  774.       of AX=2780h/CL=01h; the default handler returns AX=BX=FFFFh and
  775.       CX=0001h (see #2387)
  776.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  777.       because the request is handled on the initial trap to the memory
  778.       manager caused by INT instructions, this API must be invoked with
  779.       an actual INT 2F instruction instead of some simulation such as a
  780.       far call to the address in the interrupt vector table
  781. SeeAlso: AX=12FFh/BX=0EDCh,AX=2780h/CL=01h,AX=2780h/CL=02h,AX=2780h/CL=03h
  782. --------m-2F2780-----------------------------
  783. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API - AVAILABLE FOR APPS
  784.     AX = 2780h
  785.     CL = function (07h-0Fh)
  786.     ???
  787. Return: ???
  788. Notes:    called by DPMS.EXE and EMM386.EXE
  789.     the handlers for each of these functions may be set individually by
  790.       one of the subfunctions of AX=2780h/CL=01h; the default handlers
  791.       return with all registers unchanged
  792.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  793.       because the request is handled on the initial trap to the memory
  794.       manager caused by INT instructions, this API must be invoked with
  795.       an actual INT 2F instruction instead of some simulation such as a
  796.       far call to the address in the interrupt vector table
  797. SeeAlso: AX=12FFh/BX=0EDCh,AX=2780h/CL=01h,AX=2780h/CL=02h,AX=2780h/CL=03h
  798. --------T-2F2781-----------------------------
  799. INT 2F U - Novell DOS 7 TaskMGR - BEGIN CRITICAL SECTION???
  800.     AX = 2781h
  801. Return: ???
  802. SeeAlso: AX=2782h
  803. --------T-2F2782-----------------------------
  804. INT 2F U - Novell DOS 7 TaskMGR - END CRITICAL SECTION???
  805.     AX = 2782h
  806. Return: ???
  807. SeeAlso: AX=2781h
  808. --------m-2F2783-----------------------------
  809. INT 2F U - Novell DOS 7 - EMM386.EXE - GET ???
  810.     AX = 2783h
  811. Return: AX = ???
  812.     BX = ???
  813. --------T-2F278F-----------------------------
  814. INT 2F U - Novell DOS 7 TaskMGR - ??? API
  815.     AX = 278Fh
  816.     as for INT 2F/AX=2780h
  817. Return: as for INT 2F/AX=2780h
  818. Note:    Novell DOS 7 TaskMGR passes this call through to INT 2F/AX=2780h
  819.       without changing any other registers
  820. SeeAlso: AX=2780h/CL=01h,AX=2782h
  821. --------F-2F2A-------------------------------
  822. INT 2F - Gammafax DOS Dispatcher INTERFACE
  823.     AH = 2Ah
  824. Note:    details not available at this time
  825. SeeAlso: AX=8000h"FaxBIOS",AX=C000h/BX=444Bh,AX=CB00h,AX=CBDDh,INT 66"BitFax"
  826. --------V-2F2E00-----------------------------
  827. INT 2F U - Novell DOS 7 - GRAFTABL - INSTALLATION CHECK
  828.     AX = 2E00h
  829. Return: AH = FFh if installed
  830. Note:    this installation check does not follow the usual format of setting
  831.       AL to FFh
  832. SeeAlso: AX=2300h,AH=2Eh"GRAFTABL"
  833. --------V-2F2E-------------------------------
  834. INT 2F U - Novell DOS 7 - GRAFTABL - GET FONT TABLE
  835.     AH = 2Eh
  836.     AL nonzero
  837. Return: AH = FFh if installed
  838.         ES:BX -> graphics data (8 bytes per character from 80h to FFh)
  839. SeeAlso: AX=2E00h,AH=23h"GRAFTABL"
  840. --------t-2F3900-----------------------------
  841. INT 2F - Kingswood TSR INTERFACE - COMPATIBILITY MODE
  842.     AX = 3900h
  843. Return: AL = status
  844.         00h not installed
  845.         FFh one or more TSRs using this interface is installed
  846.         DX may be destroyed
  847. Note:    this function is provided to that the multiplex number will appear used
  848.       to other programs
  849. SeeAlso: AH=39h/BL=00h
  850. --------t-2F39--BL00-------------------------
  851. INT 2F - Kingswood TSR INTERFACE - INSTALLATION CHECK
  852.     AH = 39h
  853.     BL = 00h
  854.     AL = TSR ID number (01h-FFh, currently only 01h-1Bh used) (see #2390)
  855. Return: AL = status
  856.         00h not installed
  857.         FFh installed
  858.         DX = segment address of resident module
  859. Note:    All of Kingswood Software's TSRs use this interface.  Usually the
  860.       resident module is installed by allocating a block of upper memory,
  861.       setting its owner ID to 000Ah (used by DOS), and filling the MCB name
  862.       field with the TSR's name.
  863. SeeAlso: #2391,AX=3900h,AH=39h/BL=01h
  864.  
  865. (Table 2390)
  866. Values for Kingswood TSR ID number:
  867.  01h    TSR Windows
  868.  02h    NOBUSY
  869.  03h    CD STACK
  870.  04h    DISK WATCH
  871.  05h    PUSHBP
  872.  06h    ALIAS
  873.  07h    KEYMACRO
  874.  08h    SLOWDOWN
  875.  09h    ANSIGRAB
  876.  0Ah    TEE
  877.  0Bh    FASTMOUS
  878.  0Ch    EXTWILD
  879.  0Dh    BREAKOUT
  880.  0Eh    STOPDISK
  881.  0Fh    MEMINIT
  882.  10h    JANUSEXT
  883.  11h    CAPS
  884.  12h    ANSI
  885.  13h    TRAPPER
  886.  14h    EATMEM
  887.  15h    WPJOKE
  888.  16h    SHOWDOS
  889.  17h    LOGINTS
  890.  18h    BLANKVGA
  891.  19h    SWAPEXEC
  892.  1Ah    SHELL
  893.  1Bh    TSRGAMES
  894.  
  895. Format of Kingswood TSR modules:
  896. Offset    Size    Description    (Table 2391)
  897.  00h  4 BYTEs    signature "FTSR"
  898.  04h    WORD    segment address of this module (used to check validity)
  899.  06h    WORD    number of words to skip (usually 0000h if no PSP present)
  900.  08h  N WORDs    module-defined data that must be at a fixed segment offset
  901.         (usually only a PSP if file access is required)
  902.      5N BYTEs    interrupt list (see #2392)
  903.     BYTE    FFh terminator
  904.  
  905. Format of Kingswood TSR interrupt list entry:
  906. Offset    Size    Description    (Table 2392)
  907.  00h    BYTE    interrupt number (00h-FEh)
  908.  01h    WORD    offset within segment of DWORD pointer to previous interrupt
  909.  03h    WORD    offset within segment of begin of interrupt handler code
  910. --------t-2F39--BL01-------------------------
  911. INT 2F - Kingswood TSR INTERFACE - REMOVAL CHECK
  912.     AH = 39h
  913.     BL = 01h
  914.     AL = TSR ID number (01h-FFh) (see #2390)
  915. Return: AL = status
  916.         00h not ready to be removed
  917.         FFh resident module may be removed by deassigning the interrupts
  918.           hooked by the TSR and deallocating the TSR's memory block
  919.     AH,BX,CX,DX,ES may be destroyed
  920. SeeAlso: AX=3900h,AH=39h/BL=00h
  921. --------t-2F39-------------------------------
  922. INT 2F - Kingswood TSR INTERFACE - APPLICATION-SPECIFIC FUNCTION CALLS
  923.     AH = 39h
  924.     BL = function number (02h-FFh)
  925.     AL = TSR ID number (01h-FFh) (see #2390)
  926.     CX,DX,SI,DI,DS,ES may contain parameters
  927.     BH reserved for use by the function dispatcher
  928. Return: as appropriate for the called function
  929. SeeAlso: AX=3900h,AH=39h/BL=00h,AX=3901h/BL=02h
  930. --------r-2F3901BL02-------------------------
  931. INT 2F - Kingswood TSR Windows - OPEN WINDOW
  932.     AX = 3901h
  933.     BL = 02h
  934. Return: AX = error code (0000h if successful)
  935.     SI,DI,DS,ES preserved
  936. Notes:    opens the next TSR window on top of any others.     Only three
  937.       TSR windows can be opened at any one time.  The three windows
  938.       are all 40x11 characters, partly overlapping.
  939. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=03h,AX=3901h/BL=05h,AX=3901h/BL=06h
  940. --------r-2F3901BL03-------------------------
  941. INT 2F - Kingswood TSR Windows - HIDE WINDOWS
  942.     AX = 3901h
  943.     BL = 03h
  944. Return: AX = error code (0000h if successful)
  945.     SI,DI,DS,ES preserved
  946. Notes:    Hide any visible TSR windows from view.
  947. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h,AX=3901h/BL=05h
  948. --------r-2F3901BL04-------------------------
  949. INT 2F - Kingswood TSR Windows - SHOW WINDOWS
  950.     AX = 3901h
  951.     BL = 04h
  952. Return: AX = error code (0000h if successful)
  953.     SI,DI,DS,ES preserved
  954. Notes:    Re-display all TSR windows after a HIDE WINDOWS call.
  955. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h,AX=3901h/BL=03h
  956. --------r-2F3901BL05-------------------------
  957. INT 2F - Kingswood TSR Windows - CLOSE WINDOW
  958.     AX = 3901h
  959.     BL = 05h
  960. Return: AX = error code (0000h if successful)
  961.     SI,DI,DS,ES preserved
  962. Notes:    Close the last opened TSR window.
  963. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h
  964. --------r-2F3901BL06-------------------------
  965. INT 2F - Kingswood TSR Windows - SET WINDOW TITLE
  966.     AX = 3901h
  967.     BL = 06h
  968.     DS:SI -> title string
  969. Return: AX = error code (0000h if successful)
  970.     SI,DI,DS,ES preserved
  971. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h
  972. --------r-2F3901BL07-------------------------
  973. INT 2F - Kingswood TSR Windows - POSITION CURSOR
  974.     AX = 3901h
  975.     BL = 07h
  976.     CH = Y coordinate (0-10)
  977.     CL = X coordinate (0-39)
  978. Return: AX = error code (0000h if successful)
  979.     SI,DI,DS,ES preserved
  980. Note:    the hardware cursor is always disabled when a TSR window is opened;
  981.       this call only sets a text position
  982. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=08h,AX=3901h/BL=09h
  983. --------r-2F3901BL08-------------------------
  984. INT 2F - Kingswood TSR Windows - DISPLAY STRING
  985.     AX = 3901h
  986.     BL = 08h
  987.     DS:SI -> string
  988. Return: AX = error code (0000h if successful)
  989.     SI,DI,DS,ES preserved
  990. Notes:    The text is not clipped.
  991.     This routine understands Tab, NewLine and Carriage Return
  992. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=07h
  993. --------r-2F3901BL09-------------------------
  994. INT 2F - Kingswood TSR Windows - SCROLL WINDOW
  995.     AX = 3901h
  996.     BL = 09h
  997.     CL = scroll direction: 01h up, FFh down, 00h clear window
  998. Return: AX = error code (0000h if successful)
  999.     SI,DI,DS,ES preserved
  1000. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=07h
  1001. --------r-2F3901BL0A-------------------------
  1002. INT 2F - Kingswood TSR Windows - SOUND BEEPER
  1003.     AX = 3901h
  1004.     BL = 0Ah
  1005.     DX = sound divisor, or 0 for silence.
  1006.          (divide 1843200 by required frequency to get value for DX)
  1007.     CL = sound length in 18.2 Hz clock ticks
  1008. Return: AX = error code (0000h if successful)
  1009.     SI,DI,DS,ES preserved
  1010. SeeAlso: AH=39h/BL=00h
  1011. --------r-2F3901BL0B-------------------------
  1012. INT 2F - Kingswood TSR Windows - ADD OR REMOVE USER
  1013.     AX = 3901h
  1014.     BL = 0Bh
  1015.     CL = number of users increment: +1 if adding a new user
  1016.                     -1 if removing a user
  1017. Return: AX = error code (0000h if successful)
  1018.     SI,DI,DS,ES preserved
  1019. Note:    the TSR windows resident module may only be removed when the internal
  1020.       user count is zero
  1021. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h
  1022. --------V-2F3912BL03-------------------------
  1023. INT 2F - Kingswood ANSI display driver - SET COMPATIBILITY MODE
  1024.     AX = 3912h
  1025.     BL = 03h
  1026.     CL = new mode (00h fast, FFh BIOS)
  1027. Return: AL = old compatibility mode
  1028.     SI,DI,DS,ES preserved
  1029. SeeAlso: AX=3900h,AX=3912h/BL=04h
  1030. --------V-2F3912BL04-------------------------
  1031. INT 2F - Kingswood ANSI display driver - SET FLAGS
  1032.     AX = 3912h
  1033.     BL = 04h
  1034.     CL = new flags (see #2393)
  1035. Return: AL = old flags
  1036.     SI,DI,DS,ES preserved
  1037. SeeAlso: AX=3900h,AX=3912h/BL=03h
  1038.  
  1039. Bitfields for Kingswood ANSI flags:
  1040. Bit(s)    Description    (Table 2393)
  1041.  0    do not wrap at end of line
  1042.  1    wait for beeps to end before displaying next character
  1043.  2    do not use graphics cursor
  1044. --------W-2F4000-----------------------------
  1045. INT 2F - Windows 3+ (OS/2 2.x???) - GET VIRTUAL DEVICE DRIVER (VDD) CAPABILTIES
  1046.     AX = 4000h
  1047. Return: AL = video virtualization (see #2394)
  1048. Note:    this function is used by display drivers to find out what capabilities
  1049.       exist for the VDD driver and also trigger the VDD driver to call
  1050.       functions 4005h and 4006h.  This function also gives the Video Driver
  1051.       hardware access to the video registers.
  1052.  
  1053. (Table 2394)
  1054. Values for Windows video virtualization:
  1055.  01h    does not virtualize video access
  1056.  02h    virtualizes the video when in text mode
  1057.  03h    virtualizes the video when in text mode or single plane graphics modes
  1058.  04h    virtualizes the video when in text mode, single plane graphics modes,
  1059.       and VGA multiplane modes
  1060.  FFh    virtualizes the video fully
  1061. --------O-2F4001-----------------------------
  1062. INT 2F C - OS/2 compatibility box - SWITCHING DOS TO BACKGROUND
  1063.     AX = 4001h
  1064. Note:    called by OS/2 when the DOS box is about to be placed in the background
  1065.       and the video driver should save any necessary state
  1066. SeeAlso: AX=4002h,AX=4005h
  1067. --------O-2F4002-----------------------------
  1068. INT 2F C - OS/2 compatibility box - SWITCHING DOS TO FOREGROUND
  1069.     AX = 4002h
  1070. Note:    called by OS/2 when the DOS box is about to be placed in the foreground
  1071.       and the video driver should restore the previously-saved state
  1072. SeeAlso: AX=4001h,AX=4006h
  1073. --------W-2F4003-----------------------------
  1074. INT 2F - Windows 3.x - ENTERING VIDEO DRIVER CRITICAL SECTION
  1075.     AX = 4003h
  1076. Note:    This critical section must be exited within 1 second.
  1077. SeeAlso: AX=4004h
  1078. --------W-2F4004-----------------------------
  1079. INT 2F - Windows 3.x - EXITING VIDEO DRIVER CRITICAL SECTION
  1080.     AX = 4004h
  1081. SeeAlso: AX=4003h
  1082. --------W-2F4005-----------------------------
  1083. INT 2F C - Windows 3.x - SWITCHING DOS TO BACKGROUND
  1084.     AX = 4005h
  1085. Note:    called by Windows when the DOS box is about to be placed in the
  1086.       background and the video driver should save any necessary state
  1087.       information (this may be called only in Standard mode)
  1088. SeeAlso: AX=4001h,AX=4006h
  1089. --------W-2F4006-----------------------------
  1090. INT 2F C - Windows 3.x - SWITCHING DOS TO FOREGROUND
  1091.     AX = 4006h
  1092. Note:    called by Windows when the DOS box is about to be placed in the
  1093.       foreground and the video driver should restore any necessary state
  1094.       information (this may be called only in Standard mode)
  1095. SeeAlso: AX=4002h,AX=4005h
  1096. --------W-2F4007-----------------------------
  1097. INT 2F - Windows 3.x - ENABLE VDD TRAPPING OF VIDEO REGISTERS
  1098.     AX = 4007h
  1099. Note:    used by Windows Standard mode
  1100. --------O-2F4010-----------------------------
  1101. INT 2F - OS/2 v2.0+ - INSTALLATION CHECK / GET VERSION
  1102.     AX = 4010h
  1103. Return: AX = 4010h if OS/2 not installed
  1104.     AX = 0000h for OS/2 Warp 3.0
  1105.     BX = OS/2 version if installed
  1106. Note:    OS/2 Warp 3.0
  1107. SeeAlso: INT 21/AH=30h,INT 21/AX=3306h
  1108. --------O-2F4011-----------------------------
  1109. INT 2F - OS/2 - GET VDD API ENTRY POINT
  1110.     AX = 4011h
  1111.     DS:(E)SI -> ASCIZ name of VDD registered with VDHRegisterAPI
  1112. Return: ES:DI -> breakpoint address to call for VDD API, or 0000h:0000h
  1113. Note:    this function may be invoked from either V86 or protected mode, and
  1114.       will return the appropriate address to call for invoking the VDD
  1115.       in that mode
  1116. SeeAlso: AX=1684h"DEVICE API"
  1117. --------V-2F4021-----------------------------
  1118. INT 2F UC - Diamond Stealth64 Video - STLTH64.VXD - ???
  1119.     AX = 4021h
  1120.     ???
  1121. Return: ???
  1122. SeeAlso: AX=4022h,AX=4023h
  1123. --------V-2F4022-----------------------------
  1124. INT 2F UC - Diamond Stealth64 Video - STLTH64.VXD - ???
  1125.     AX = 4022h
  1126.     ???
  1127. Return: ???
  1128. SeeAlso: AX=4021h,AX=4023h
  1129. --------V-2F4023-----------------------------
  1130. INT 2F UC - Diamond Stealth64 Video - STLTH64.VXD - ???
  1131.     AX = 4023h
  1132.     ???
  1133. Return: ???
  1134. SeeAlso: AX=4021h,AX=4022h
  1135. --------E-2F4040-----------------------------
  1136. INT 2F - PharLap 286|DOS-Extender Lite v2.5 - ???
  1137.     AX = 4040h
  1138. Return: BX:CX -> ???
  1139. --------N-2F4100-----------------------------
  1140. INT 2F - DOS Enhanced LAN Manager 2.0+ MINIPOP/NETPOPUP - INSTALLATION CHECK
  1141.     AX = 4100h
  1142. Return: CF clear if successful
  1143.         AL = FFh
  1144.     CF set on error
  1145.         AX = ???
  1146. Notes:    MINIPOP and NETPOPUP provide a network message popup service
  1147.     LAN Manager enhanced mode adds features beyond the standard redirector
  1148.       file/printer services
  1149. SeeAlso: AX=118Ah,AX=4103h,AX=4104h,AH=42h,AH=4Bh
  1150. --------N-2F4103-----------------------------
  1151. INT 2F - DOS Enhanced LAN Manager 2.0+ MINIPOP/NETPOPUP - ???
  1152.     AX = 4103h
  1153. Return: ???
  1154. SeeAlso: AX=4100h,AX=4104h
  1155. --------N-2F4104-----------------------------
  1156. INT 2F - DOS Enhanced LAN Manager 2.0+ MINIPOP/NETPOPUP - ???
  1157.     AX = 4104h
  1158. Return: ???
  1159. SeeAlso: AX=4100h,AX=4103h
  1160. --------N-2F42-------------------------------
  1161. INT 2F - LAN Manager 2.0 DOS Enhanced MSRV.EXE - MESSENGER SERVICE
  1162.     AH = 42h
  1163.     ???
  1164. Return: ???
  1165. Note:    LAN Manager enhanced mode adds features beyond the standard redirector
  1166.       file/printer services
  1167. SeeAlso: AX=118Ah,AX=4100h,AH=4Bh
  1168. --------m-2F4300-----------------------------
  1169. INT 2F - EXTENDED MEMORY SPECIFICATION (XMS) v2+ - INSTALLATION CHECK
  1170.     AX = 4300h
  1171. Return: AL = 80h XMS driver installed
  1172.     AL <> 80h no driver
  1173. Notes:    XMS gives access to extended memory and noncontiguous/nonEMS memory
  1174.       above 640K
  1175.     this installation check DOES NOT follow the format used by other
  1176.       software
  1177. SeeAlso: AX=4310h,AX=1687h,INT 67/AH=40h,@xxxxh:xxxxh"PMM"
  1178. Index:    installation check;XMS version 2+
  1179. --------m-2F4308-----------------------------
  1180. INT 2F U - HIMEM.SYS v2.77+ - GET A20 HANDLER NUMBER
  1181.     AX = 4308h
  1182. Return: AL = 43h if supported
  1183.         BL = A20 handler number (value of /MACHINE:nn switch)
  1184.         BH = AT A20 switch time (00h medium, 01h fast, 02h slow)
  1185. Note:    if the A20 handler number returned in BL is 00h, an external handler
  1186.       is being used (see AX=4330h)
  1187. SeeAlso: AX=4309h,AX=4330h
  1188. --------m-2F4309-----------------------------
  1189. INT 2F U - HIMEM.SYS v3.09+ - GET XMS HANDLE TABLE
  1190.     AX = 4309h
  1191. Return: AL = 43h if function supported
  1192.         ES:BX -> XMS handle table (see #2395)
  1193. Note:    HIMEM.SYS v3.09 is part of MS-DOS 6.0.
  1194. SeeAlso: AX=4308h
  1195.  
  1196. Format of XMS handle table:
  1197. Offset    Size    Description    (Table 2395)
  1198.  00h    BYTE    ??? (01h in HIMEM.SYS v3.09)
  1199.  01h    BYTE    size of one handle descriptor
  1200.  02h    WORD    number of handles (default = 20h)
  1201.  04h    DWORD    pointer to XMS handle array (see #2396)
  1202. SeeAlso: #2425
  1203.  
  1204. Format of XMS handle descriptor [array]:
  1205. Offset    Size    Description    (Table 2396)
  1206.  00h    BYTE    flag
  1207.         01h=free, 02h=used, 04h=in pool but not associated with any EMB
  1208.  01h    BYTE    lock count (00h=unlocked)
  1209.  02h    DWORD    address of XMS block in KB (shift left by 10 for abs. address)
  1210.  06h    DWORD    size of XMS block in KB
  1211. --------m-2F4310-----------------------------
  1212. INT 2F - EXTENDED MEMORY SPECIFICATION (XMS) v2+ - GET DRIVER ADDRESS
  1213.     AX = 4310h
  1214. Return: ES:BX -> driver entry point (see #2397,#2398,#2401,#2408,#2417,#2422)
  1215. Notes:    HIMEM.SYS v2.77 chains to previous handler if AH is not 00h or 10h
  1216.     HIMEM.SYS requires at least 256 bytes free stack space when calling
  1217.       the driver entry point
  1218. SeeAlso: AX=4300h,AX=4310h"Cloaking",AX=4310h"Netroom",AX=4310h"XMZ"
  1219.  
  1220. Format of XMS driver entry point:
  1221. Offset    Size    Description    (Table 2397)
  1222.  00h  5 BYTEs    jump to actual handler
  1223.         either short jump (EBh XXh) followed by three NOPs or
  1224.           far jump (EAh XXXX:XXXX) to a program which has hooked itself
  1225.           into the XMS driver chain
  1226. Note:    to hook into the XMS driver chain, a program should follow the chain of
  1227.       far jumps until it reaches the short jump of the driver at the end
  1228.       of the chain; this short jump is to be replaced with a far jump to
  1229.       the new handler's entry point, which should contain a short jump
  1230.       followed by three NOPs.  The new handler must return to the address
  1231.       pointed at by the short jump which was overwritten.  Using this
  1232.       method, the new handler becomes the first to see every XMS request.
  1233.  
  1234. (Table 2398)
  1235. Call the XMS driver "Get XMS version number" function with:
  1236.     AH = 00h
  1237. Return: AX = XMS version (in BCD, AH=major, AL=minor)
  1238.     BX = internal revision number (in BCD for HIMEM.SYS)
  1239.     DX = High Memory Area (HMA) state
  1240.         0001h HMA (1M to 1M + 64K) exists
  1241.         0000h HMA does not exist
  1242. SeeAlso: #2399,#2400,#2405,#2406,#2412
  1243.  
  1244. (Table 2399)
  1245. Call the XMS driver "Request High Memory Area" function with:
  1246.     AH = 01h
  1247.     DX = memory in bytes (for TSR or device drivers)
  1248.         FFFFh if application program
  1249. Return: AX = status
  1250.         0001h success
  1251.         0000h failure
  1252.         BL = error code (80h,81h,90h,91h,92h) (see #2423)
  1253. Note:    HIMEM.SYS will fail function 01h with error code 91h if AL=40h and
  1254.       DX=KB free extended memory returned by last call of function 08h
  1255. SeeAlso: #2400,#2432
  1256.  
  1257. (Table 2400)
  1258. Call the XMS driver "Release High Memory Area" function with:
  1259.     AH = 02h
  1260. Return: AX = status
  1261.         0001h success
  1262.         0000h failure
  1263.         BL = error code (80h,81h,90h,93h) (see #2423)
  1264. SeeAlso: #2399
  1265.  
  1266. (Table 2401)
  1267. Call the XMS driver "Global enable A20, for using the HMA" function with:
  1268.     AH = 03h
  1269. Return: AX = status
  1270.         0001h success
  1271.         0000h failure
  1272.         BL = error code (80h,81h,82h) (see #2423)
  1273. SeeAlso: #2402,#2403,MSR 00001000h
  1274.  
  1275. (Table 2402)
  1276. Call the XMS driver "Global disable A20" function with:
  1277.     AH = 04h
  1278. Return: AX = status
  1279.         0001h success
  1280.         0000h failure
  1281.         BL = error code (80h,81h,82h,94h) (see #2423)
  1282. SeeAlso: #2401,#2404,MSR 00001000h
  1283.  
  1284. (Table 2403)
  1285. Call the XMS driver "Local enable A20" function with:
  1286.     AH = 05h
  1287. Return: AX = status
  1288.         0001h success
  1289.         0000h failure
  1290.         BL = error code (80h,81h,82h) (see #2423)
  1291. Note:    this function is used for direct access to extended memory
  1292. SeeAlso: #2401,#2404
  1293.  
  1294. (Table 2404)
  1295. Call the XMS driver "Local disable A20" function with:
  1296.     AH = 06h
  1297. Return: AX = status
  1298.         0001h success
  1299.         0000h failure
  1300.         BL = error code (80h,81h,82h,94h) (see #2423)
  1301. SeeAlso: #2402,#2403
  1302.  
  1303. (Table 2405)
  1304. Call the XMS driver "Query A20 state" function with:
  1305.     AH = 07h
  1306. Return: AX = status
  1307.         0001h enabled
  1308.         0000h disabled
  1309.         BL = error code (00h,80h,81h) (see #2423)
  1310. SeeAlso: #2398,#2406
  1311.  
  1312. (Table 2406)
  1313. Call the XMS driver "Query free extended memory" function with:
  1314.     AH = 08h
  1315.     BL = 00h (some implementations leave BL unchanged on success)
  1316. Return: AX = size of largest extended memory block in KB
  1317.     DX = total extended memory in KB
  1318.     BL = error code (00h,80h,81h,A0h) (see #2423)
  1319. Note:    this function does not include the HMA in the returned memory sizes
  1320. SeeAlso: #2398,#2405,#2407,#2419
  1321.  
  1322. (Table 2407)
  1323. Call the XMS driver "Allocate extended memory block" function with:
  1324.     AH = 09h
  1325.     DX = Kbytes needed
  1326. Return: AX = status
  1327.         0001h success
  1328.         DX = handle for memory block
  1329.         0000h failure
  1330.         BL = error code (80h,81h,A0h) (see #2423)
  1331. SeeAlso: #2406,#2409,#2412,#2413,#2414,#2420
  1332.  
  1333. (Table 2408)
  1334. Call the XMS driver "Free extended memory block" function with:
  1335.     AH = 0Ah
  1336.     DX = handle of block to free
  1337. Return: AX = status
  1338.         0001h success
  1339.         0000h failure
  1340.         BL = error code (80h,81h,A2h,ABh) (see #2423)
  1341. SeeAlso: #2407,#2420
  1342.  
  1343. (Table 2409)
  1344. Call the XMS driver "Move extended memory block" function with:
  1345.     AH = 0Bh
  1346.     DS:SI -> EMM structure (see #2424)
  1347. Return: AX = status
  1348.         0001h success
  1349.         0000h failure
  1350.         BL = error code (80h-82h,A3h-A9h) (see #2423)
  1351. Note:    if either handle in the EMM structure is 0000h, the corresponding
  1352.       offset is considered to be an absolute segment:offset address in
  1353.       directly addressable memory
  1354. SeeAlso: #2407,#2410
  1355.  
  1356. (Table 2410)
  1357. Call the XMS driver "Lock extended memory block" function with:
  1358.     AH = 0Ch
  1359.     DX = handle of block to lock
  1360. Return: AX = status
  1361.         0001h success
  1362.         DX:BX = 32-bit physical address of locked block
  1363.         0000h failure
  1364.         BL = error code (80h,81h,A2h,ACh,ADh) (see #2423)
  1365. Note:    MS Windows 3.x rejects this function for handles allocated after
  1366.       Windows started
  1367. SeeAlso: #2407,#2409,#2411
  1368.  
  1369. (Table 2411)
  1370. Call the XMS driver "Unlock extended memory block" function with:
  1371.     AH = 0Dh
  1372.     DX = handle of block to unlock
  1373. Return: AX = status
  1374.         0001h success
  1375.         0000h failure
  1376.         BL = error code (80h,81h,A2h,AAh) (see #2423)
  1377. SeeAlso: #2410
  1378.  
  1379. (Table 2412)
  1380. Call the XMS driver "Get handle information" function with:
  1381.     AH = 0Eh
  1382.     DX = handle for which to get info
  1383. Return: AX = status
  1384.         0001h success
  1385.         BH = block's lock count
  1386.         BL = number of free handles left
  1387.         DX = block size in KB
  1388.         0000h failure
  1389.         BL = error code (80h,81h,A2h) (see #2423)
  1390. BUG:    MS Windows 3.10 acts as though unallocated handles are in use
  1391. Note:    MS Windows 3.00 has problems with this call
  1392. SeeAlso: #2398,#2407,#2421
  1393.  
  1394. (Table 2413)
  1395. Call the XMS driver "Reallocate extended memory block" function with:
  1396.     AH = 0Fh
  1397.     DX = handle of block
  1398.     BX = new size of block in KB
  1399. Return: AX = status
  1400.         0001h success
  1401.         0000h failure
  1402.         BL = error code (80h,81h,A0h-A2h,ABh) (see #2423)
  1403. SeeAlso: #2407,#2416
  1404.  
  1405. (Table 2414)
  1406. Call the XMS driver "Request upper memory block" function with:
  1407.     AH = 10h
  1408.     DX = size of block in paragraphs
  1409. Return: AX = status
  1410.         0001h success
  1411.         BX = segment address of UMB
  1412.         DX = actual size of block
  1413.         0000h failure
  1414.         BL = error code (80h,B0h,B1h) (see #2423)
  1415.         DX = largest available block
  1416. Notes:    Upper Memory consists of non-EMS memory between 640K and 1024K
  1417.     the XMS driver need not implement functions 10h through 12h to be
  1418.       considered compliant with the standard
  1419.     under DOS 5+, if CONFIG.SYS contains the line DOS=UMB, then no upper
  1420.       memory blocks will be available for allocation because all blocks
  1421.       have been grabbed by MS-DOS while booting
  1422. SeeAlso: #2407,#2415,#2433,INT 21/AH=58h"UMB"
  1423.  
  1424. (Table 2415)
  1425. Call the XMS driver "Release upper memory block" function with:
  1426.     AH = 11h
  1427.     DX = segment address of UMB to release
  1428. Return: AX = status
  1429.         0001h success
  1430.         0000h failure
  1431.         BL = error code (80h,B2h) (see #2423)
  1432. Note:    the XMS driver need not implement functions 10h through 12h to be
  1433.       considered compliant with the standard
  1434. SeeAlso: #2408,#2414,#2416
  1435.  
  1436. (Table 2416)
  1437. Call the XMS v3.0+ driver "Reallocate upper memory block" function with:
  1438.     AH = 12h
  1439.     DX = segment address of UMB to resize
  1440.     BX = new size of block in paragraphs
  1441. Return: AX = status
  1442.         0001h success
  1443.         0000h failure
  1444.         BL = error code (80h,B0h,B2h) (see #2423)
  1445.         DX = maximum available size (RM386)
  1446. Note:    the XMS driver need not implement functions 10h through 12h to be
  1447.       considered compliant with the standard
  1448. SeeAlso: #2413,#2414,#2415,#2431
  1449.  
  1450. (Table 2417)
  1451. Call the QEMM v5.11 "???" function with:
  1452.     AH = 34h  (QEMM 5.11 only, undocumented)
  1453.     ???
  1454. Return: ???
  1455. SeeAlso: #2418
  1456.  
  1457. (Table 2418)
  1458. Call the QEMM v5.11 "???" function with:
  1459.     AH = 44h  (QEMM 5.11 only, undocumented)
  1460.     ???
  1461. Return: ???
  1462. SeeAlso: #2417,#2431
  1463.  
  1464. (Table 2419)
  1465. Call the XMS v3.0 driver "Query free extended memory" function with:
  1466.     AH = 88h
  1467. Return: EAX = largest block of extended memory, in KB
  1468.     BL = status (00h,80h,81h,A0h) (see #2423)
  1469.     ECX = physical address of highest byte of memory
  1470.         (valid even on error codes 81h and A0h)
  1471.     EDX = total Kbytes of extended memory (0 if status A0h)
  1472. BUG:    HIMEM v3.03-3.07 crash on an 80286 machine if any of the 8Xh functions
  1473.       are called
  1474. SeeAlso: #2406,#2420
  1475.  
  1476. (Table 2420)
  1477. Call the XMS v3.0 driver "Allocate any extended memory" function with:
  1478.     AH = 89h
  1479.     EDX = Kbytes needed
  1480. Return: AX = status
  1481.         0001h success
  1482.         DX = handle for allocated block (free with AH=0Ah) (see #2408)
  1483.         0000h failure
  1484.         BL = status (80h,81h,A0h,A1h,A2h) (see #2423)
  1485. SeeAlso: #2407,#2419
  1486.  
  1487. (Table 2421)
  1488. Call the XMS v3.0 driver "Get extended EMB handle information" function with:
  1489.     AH = 8Eh
  1490.     DX = handle
  1491. Return: AX = status
  1492.         0001h success
  1493.         BH = block's lock count
  1494.         CX = number of free handles left
  1495.         EDX = block size in KB
  1496.         0000h failure
  1497.         BL = status (80h,81h,A2h) (see #2423)
  1498. BUG:    MS-DOS 6.0 HIMEM.SYS leaves CX unchanged
  1499. SeeAlso: #2412,#2420,#2422
  1500.  
  1501. (Table 2422)
  1502. Call the XMS v3.0 driver "Reallocate any extended memory block" function with:
  1503.     AH = 8Fh
  1504.     DX = unlocked memory block handle
  1505.     EBX = new size in KB
  1506. Return: AX = status
  1507.         0001h success
  1508.         0000h failure
  1509.         BL = status (80h,81h,A0h-A2h,ABh) (see #2423)
  1510. BUG:    HIMEM v3.03-3.07 crash on an 80286 machine if any of the 8Xh functions
  1511.       are called
  1512. SeeAlso: #2413,#2421
  1513.  
  1514. (Table 2423)
  1515. Values for XMS error code returned in BL:
  1516.  00h    successful
  1517.  80h    function not implemented
  1518.  81h    Vdisk was detected
  1519.  82h    an A20 error occurred
  1520.  8Eh    a general driver error
  1521.  8Fh    unrecoverable driver error
  1522.  90h    HMA does not exist or is not managed by XMS provider
  1523.  91h    HMA is already in use
  1524.  92h    DX is less than the /HMAMIN= parameter
  1525.  93h    HMA is not allocated
  1526.  94h    A20 line still enabled
  1527.  A0h    all extended memory is allocated
  1528.  A1h    all available extended memory handles are allocated
  1529.  A2h    invalid handle
  1530.  A3h    source handle is invalid
  1531.  A4h    source offset is invalid
  1532.  A5h    destination handle is invalid
  1533.  A6h    destination offset is invalid
  1534.  A7h    length is invalid
  1535.  A8h    move has an invalid overlap
  1536.  A9h    parity error occurred
  1537.  AAh    block is not locked
  1538.  ABh    block is locked
  1539.  ACh    block lock count overflowed
  1540.  ADh    lock failed
  1541.  B0h    only a smaller UMB is available
  1542.  B1h    no UMB's are available
  1543.  B2h    UMB segment number is invalid
  1544.  
  1545. Format of EMM structure:
  1546. Offset    Size    Description    (Table 2424)
  1547.  00h    DWORD    number of bytes to move (must be even)
  1548.  04h    WORD    source handle
  1549.  06h    DWORD    offset into source block
  1550.  0Ah    WORD    destination handle
  1551.  0Ch    DWORD    offset into destination block
  1552. Notes:    if source and destination overlap, only forward moves (source base
  1553.       less than destination base) are guaranteed to work properly
  1554.     if either handle is zero, the corresponding offset is interpreted
  1555.       as a real-mode address referring to memory directly addressable
  1556.       by the processor
  1557.  
  1558. Format of XMS handle info [array]:
  1559. Offset    Size    Description    (Table 2425)
  1560.  00h    BYTE    handle
  1561.  01h    BYTE    lock count
  1562.  02h    DWORD    handle size
  1563.  06h    DWORD    handle physical address (only valid if lock count nonzero)
  1564. SeeAlso: #2395
  1565. --------m-2F4310-----------------------------
  1566. INT 2F - Cloaking - REAL-MODE API
  1567.     AX = 4310h
  1568. Return: ES:BX -> driver entry point (see #2397,#2426,#2427,#2428,#2429)
  1569. SeeAlso: AX=4310h"XMS"
  1570.  
  1571. (Table 2426)
  1572. Call the Cloaking v1.01 "Client Registration" function with:
  1573.     AH = 7Eh
  1574.     BX = subfunction
  1575.         0000h get client registration count
  1576.         0001h get client registration structures
  1577.         ES:DI -> buffer for registration structures
  1578. Return: AX = status
  1579.         0000h failed
  1580.         0001h successful
  1581.         ---subfunction 00h---
  1582.         BX = size of client structure in bytes
  1583.         CX = number of clients installed
  1584.         ---subfunction 01h---
  1585.         ES:DI buffer filled
  1586. SeeAlso: #2427,#2429,INT 2C/AX=0033h
  1587.  
  1588. (Table 2427)
  1589. Call the Cloaking v1.01 "Verify Cloaking Host" function with:
  1590.     AH = 7Fh
  1591. Return: AX = status
  1592.         0000h failed
  1593.         0001h (successful) if installed
  1594.         BX = version (0101h for v1.01)
  1595.         CX = flags
  1596.             bit 0: host is VCPI-based
  1597.         DS:DX -> ASCIZ Cloaking host signature
  1598.             "CLOAKING.EXE"0, followed by a far-call entry point to
  1599.               uninstall host (see #2428) in Helix's CLOAKING.EXE
  1600. SeeAlso: #2426,#2429
  1601. Index:    installation check;Cloaking host|installation check;CLOAKING.EXE
  1602.  
  1603. (Table 2428)
  1604. Call the CLOAKING.EXE "Uninstall Host" function with:
  1605. Return: AX = 4F4Bh ('OK') if successfully uninstalled protected-mode code
  1606.  
  1607. (Table 2429)
  1608. Call the Cloaking "Start Protected-Mode Client" function with:
  1609.     AH = 82h
  1610.     DX = XMS handle of locked block containing protected-mode code
  1611.     CL = code size (00h 16-bit, else 32-bit)
  1612.     ESI, EDI = parameters to pass to protected-mode code
  1613. Return: AX = status
  1614.         nonzero success
  1615.         0000h failed
  1616.         BL = error code (A2h,B0h) (see #2423)
  1617. Notes:    this function calls a user initialization function at offset 0 in
  1618.       the XMS memory block (see #2430)
  1619.     supported by Helix's RM386 v6.00 and Helix's CLOAKING.EXE
  1620. SeeAlso: #2426,#2427
  1621.  
  1622. (Table 2430)
  1623. Values user initialization function is called with:
  1624.     EBX = physical address of block's start
  1625.     ESI = user data from function 82h call
  1626.     EDI = user data from function 82h call
  1627.     CS = code selector for XMS block at EBX (16-bit or 32-bit)
  1628.     DS = data selector for XMS block, starting at EBX
  1629.     ES = selector for V86 memory access to full real-mode 1088K
  1630.     GS = selector for full 4G flat address space
  1631.     SS:ESP -> stack provided by host
  1632. Return: via 32-bit FAR return
  1633. Note:    the initialization function may call any protected-mode Cloaking
  1634.       service; it should store the values of DS, ES, and GS for future
  1635.       reference
  1636. --------m-2F4310-----------------------------
  1637. INT 2F - Helix Netroom RM386 v6.00 - XMS EXTENSIONS
  1638.     AX = 4310h
  1639. Return: ES:BX -> driver entry point (see #2431,#2432,#2433,#2434)
  1640. Notes:    HIMEM.SYS v2.77 chains to previous handler if AH is not 00h or 10h
  1641.     HIMEM.SYS requires at least 256 bytes free stack space when calling
  1642.       the driver entry point
  1643. SeeAlso: AX=4300h,AX=4310h"XMS",AX=4310h"Cloaking"
  1644.  
  1645. (Table 2431)
  1646. Call the Netroom RM386 v6.00 "Reallocate upper memory block" function with:
  1647.     AH = 80h
  1648.     DX = segment address of UMB to resize
  1649.     BX = new size of block in paragraphs
  1650. Return: AX = status
  1651.         0001h success
  1652.         0000h failure
  1653.         BL = error code (80h,B0h,B2h) (see #2423)
  1654.         DX = maximum available size
  1655. Note:    this function is identical to function 12h
  1656. SeeAlso: #2416,#2432
  1657.  
  1658. (Table 2432)
  1659. Call the Netroom RM386 v6.00 "re-enable HMA allocation" function with:
  1660.     AH = 81h
  1661. Return: AX = 0001h (success)
  1662. SeeAlso: #2399,#2431,#2433
  1663.  
  1664. (Table 2433)
  1665. Call the Netroom RM386 v6.00 "Create new UMB entry" function with:
  1666.     AH = 83h
  1667.     BX = segment of high-memory block
  1668.     DX = first page of start of block
  1669.     CX = number of consecutive pages in block
  1670.     DI = start of UMB in block
  1671. Return: AX = 0001h (success)
  1672.     DI = segment of first high-DOS block
  1673. Note:    the new UMB is not linked into the high-memory chain
  1674. SeeAlso: #2414,#2432,#2434
  1675.  
  1676. (Table 2434)
  1677. Call the Netroom RM386 v6.00 "Get all XMS handles info" function with:
  1678.     AH = 84h
  1679.     CX = size of buffer for handle info
  1680.     ES:DI -> buffer for handle info (see #2425)
  1681. Return: AX = 0001h (success)
  1682.     DX = current number of allocated XMS handles
  1683. SeeAlso: #2433,#2419
  1684. --------m-2F4310-----------------------------
  1685. INT 2F - NEC PC-9800 - XMZ - PRIVATE API
  1686.     AX = 4310h
  1687. Return: ES:BX -> driver entry point (see #2435,#2436)
  1688. Program: XMZ is an XMS 2.x-compatible driver for the NEC PC-98 series written
  1689.       by ZOBplus Hayami and available at
  1690.       ftp:/ftp.tohoku.ac.jp/pub/msdos/Memory/xmz/
  1691. SeeAlso: AX=4300h,AX=4310h"XMS"
  1692.  
  1693. (Table 2435)
  1694. Call XMZ v1.02 "Get HMA Information" function with:
  1695.     AH = FFh  (XMZ only)
  1696.     AL = 01h
  1697. Return: AX = 1 on success
  1698.     DX = minimum HMA allocation size (/HMAMIN=)
  1699.     BX = actual size of HMA allocation, if in use (i.e. the value in DX
  1700.           when XMS function 1 was called)
  1701. SeeAlso: #2436
  1702.  
  1703. (Table 2436)
  1704. Call XMZ v1.02 "Get EMB Handle Information" function with:
  1705.     AH = FFh  (XMZ only)
  1706.     AL = 02h
  1707. Return: AX = 1 on success
  1708.     DX = number of EMB handles configured (/NUMHANDLES=)
  1709.     BX = offset in XMZ's segment of the handle table (use segment of
  1710.           entry point) (see #2437)
  1711. SeeAlso: #2435
  1712.  
  1713. Format of XMZ v1.02 EMB Handle structure:
  1714. Offset    Size    Description    (Table 2437)
  1715.  00h    BYTE    flag byte
  1716.         04h unused handle slot
  1717.         02h in-use handle slot
  1718.         01h handle slot that represents a free block
  1719.  01h    BYTE    lock count
  1720.  02h    WORD    block start address (1K increments)
  1721.  04h    WORD    block length (1K increments)
  1722. SeeAlso: #2436
  1723. --------m-2F4320-----------------------------
  1724. INT 2F U - HIMEM.SYS - Mach 20 SUPPORT
  1725.     AX = 4320h
  1726.     ???
  1727. Return: ???
  1728. --------m-2F4330-----------------------------
  1729. INT 2F CU - HIMEM.SYS v2.77+ - GET EXTERNAL A20 HANDLER ADDRESS
  1730.     AX = 4330h
  1731. Return: AL = 80h if external A20 handler provided
  1732.         ES:BX -> external A20 handler (see #2438)
  1733.         CL = A20 detection support
  1734.         00h handler is unable to report A20 state
  1735.         01h handler supports function 0002h to report A20 state
  1736. Note:    HIMEM.SYS calls this function to allow an external program to provide
  1737.       an A20 handler (i.e. to support a machine not supported by HIMEM
  1738.       itself)
  1739. SeeAlso: AX=4308h,AX=4310h
  1740.  
  1741. (Table 2438)
  1742. Call parameters for external A20 handler are:
  1743.     AX = function
  1744.         0000h disable A20
  1745.         0001h enable A20
  1746.         0002h get A20 state
  1747. Return: AX = status (functions 0000h and 0001h)
  1748.         0000h failure
  1749.         0001h successful
  1750.     AX = A20 state (function 0002h)
  1751.         0000h disabled
  1752.         0001h enabled
  1753. Note:    HIMEM.SYS only calls function 0002h if the returned CL indicated that
  1754.       the handler supports the call
  1755. ----------2F43D6-----------------------------
  1756. INT 2F - Multiplex - ???
  1757.     AX = 43D6h
  1758. Note:    Central Point's CPBACKUP v9 calls this function with CX=07FFh and
  1759.       DX=80D3h at startup
  1760. --------E-2F43E0BX0000-----------------------
  1761. INT 2F - DOS Protected Mode Services (DPMS) v1.0 - INSTALLATION CHECK
  1762.     AX = 43E0h
  1763.     BX = 0000h
  1764.     CX = 4450h ('DP')
  1765.     DX = 4D53h ('MS')
  1766. Return: AX = 0000h if installed
  1767.         CF clear
  1768.         ES:DI -> server structure (see #2439)
  1769.         ES:BX -> registration structure (pre-NWDOS 7 beta spec) (see #2441)
  1770. Note:    the DPMS 1.0 server included with the original release of Novell DOS
  1771.       7.0 supports both the beta and 1.0 specification, setting ES:BX even
  1772.       if CX and DX are not as specified on entry (since the beta
  1773.       specification did not use those registers).  However, the DPMS 1.1
  1774.       server included with the March 1994 update does not support the beta
  1775.       specification
  1776. SeeAlso: AX=43E1h,AX=43E2h,AX=43E3h,INT 2F/AX=1687h
  1777. Index:    signature strings;DPMS
  1778.  
  1779. Format of DPMS 1.0 server structure:
  1780. Offset    Size    Description    (Table 2439)
  1781.  00h  4 BYTEs    signature string "DPMS"
  1782.  04h  2 BYTEs    DPMS version (major,minor)
  1783.  06h  8 BYTEs    blank-padded server OEM name
  1784.  0Eh  2 BYTEs    OEM server version (major,minor)
  1785.  10h    WORD    DPMS flags (see #2440)
  1786.  12h    BYTE    CPU type
  1787.         (02h = 286, 03h = 386 or higher, higher values allowed)
  1788.  
  1789. Bitfields for DPMS flags:
  1790. Bit(s)    Description    (Table 2440)
  1791.  0    fast processor reset available (286 only)
  1792.  1    DPMS server is enabled
  1793.  2    memory is remapped
  1794.  3-15    reserved (undefined)
  1795.  
  1796. Format of beta DPMS registration structure:
  1797. Offset    Size    Description    (Table 2441)
  1798.  00h    DWORD    real-mode API entry point (see #2443)
  1799.  04h    DWORD    16-bit protected-mode API entry point (see #2443)
  1800.  08h  8 BYTEs    reserved (0)
  1801.  10h  8 BYTEs    blank-padded server OEM name
  1802.  18h    WORD    flags
  1803.         bit 0: fast processor reset available (286 only)
  1804.         bits 1-15 reserved (undefined)
  1805.  1Ah  2 BYTEs    DPMS version (major,minor)
  1806.  1Ch    BYTE    CPU type (02h = 286, 03h = 386 or higher)
  1807. --------m-2F43E1-----------------------------
  1808. INT 2F - DOS Protected Mode Services (DPMS) v1.0 - REGISTER CLIENT
  1809.     AX = 43E1h
  1810.     CX = required protected-mode stack size in bytes
  1811.     ES:DI -> DPMS client interface structure (see #2442)
  1812. Return: AX = 0000h if supported
  1813.        CF clear
  1814.        ES:DI buffer filled with API entry point code from offset 0Ah
  1815. Note:    the client is allowed to copy the returned API code to any location in
  1816.       memory, and need not keep the three code fields together
  1817. SeeAlso: AX=43E0h,AX=43E2h,AX=43E3h
  1818.  
  1819. Format of DPMS client interface structure:
  1820. Offset    Size    Description    (Table 2442)
  1821.  00h    WORD    0000h (structure version / flags)
  1822.  02h  8 BYTEs    blank-padded client name
  1823.  0Ah  7 BYTEs    real/virtual-86 mode API code (see #2443)
  1824.  11h    BYTE    space for return instruction
  1825.         set to C3h for near return, CBh for far return
  1826.  12h  7 BYTEs    16-bit protected-mode API code (see #2443)
  1827.  19h    BYTE    space for return instruction
  1828.         set to C3h for near return, CBh for far return
  1829.  1Ah  9 BYTEs    32-bit protected-mode API code (see #2443)
  1830.  23h    BYTE    space for return instruction
  1831.         set to C3h for near return, CBh for far return
  1832. Note:    the DPMS server fills the return opcode bytes with zeros and DPMS
  1833.       requests will thus crash the system unless the application
  1834.       explicitly sets them (some early versions set them to C3h by
  1835.       default, but one should not rely on that)
  1836.  
  1837. (Table 2443)
  1838. Call DPMS entry point with:
  1839.     AX = 0000h unregister client from server
  1840.  ---control transfer functions---
  1841.     AX = 0100h call protected-mode procedure
  1842.         CX = number of words of stack to copy
  1843.         ES:(E)DI -> callup/down register structure (see #2445)
  1844.         Return: CF clear if successful
  1845.             CF set on error
  1846.                 AX = error code (see #2444)
  1847.     AX = 0101h call real-mode procedure (RETF return)
  1848.         CX = number of words of stack to copy
  1849.         ES:(E)DI -> callup/down register structure (see #2445)
  1850.         Return: CF clear if successful
  1851.             CF set on error
  1852.                 AX = error code (see #2444)
  1853.     AX = 0102h call real-mode procedure (IRET return)
  1854.         CX = number of words of stack to copy
  1855.         ES:(E)DI -> callup/down register structure (see #2445)
  1856.         Return: CF clear if successful
  1857.             CF set on error
  1858.                 AX = error code (see #2444)
  1859.     AX = 0103h call real-mode interrupt handler
  1860.         BL = interrupt number
  1861.         CX = number of words of stack to copy
  1862.         ES:(E)DI -> callup/down register structure (see #2445)
  1863.         Return: CF clear if successful
  1864.             CF set on error
  1865.                 AX = error code (see #2444)
  1866.     AX = 0104h register default protected mode procedure
  1867.         ES:(E)DI -> default register structure (see #2446)
  1868.         Return: CF clear if successful
  1869.             CF set on error
  1870.                 AX = error code (see #2444)
  1871.     AX = 0105h register default real-mode procedure (RETF return)
  1872.         ES:(E)DI -> default register structure (see #2446)
  1873.         Return: CF clear if successful
  1874.             CF set on error
  1875.                 AX = error code (see #2444)
  1876.         Note:    the procedure will be called from 16-bit prot. mode
  1877.     AX = 0106h register default real-mode procedure (IRET return)
  1878.         ES:(E)DI -> default register structure (see #2446)
  1879.         Return: CF clear if successful
  1880.             CF set on error
  1881.                 AX = error code (see #2444)
  1882.         Note:    the procedure will be called from 16-bit prot. mode
  1883.     AX = 0107h register default real-mode interrupt handler
  1884.         BL = interrupt number
  1885.         ES:(E)DI -> default register structure (see #2446)
  1886.         Return: CF clear if successful
  1887.             CF set on error
  1888.                 AX = error code (see #2444)
  1889.         Note:    the handler will be called from 16-bit protected mode
  1890.     AX = 0108h register default real-mode procedure (RETF return)
  1891.         ES:(E)DI -> default register structure (see #2446)
  1892.         Return: CF clear if successful
  1893.             CF set on error
  1894.                 AX = error code (see #2444)
  1895.         Note:    the procedure will be called from 32-bit prot. mode
  1896.     AX = 0109h register default real-mode procedure (IRET return)
  1897.         ES:(E)DI -> default register structure (see #2446)
  1898.         Return: CF clear if successful
  1899.             CF set on error
  1900.                 AX = error code (see #2444)
  1901.         Note:    the procedure will be called from 32-bit prot. mode
  1902.     AX = 010Ah register default real-mode interrupt handler
  1903.         BL = interrupt number
  1904.         ES:(E)DI -> default register structure (see #2446)
  1905.         Return: CF clear if successful
  1906.             CF set on error
  1907.                 AX = error code (see #2444)
  1908.         Note:    the handler will be called from 32-bit protected mode
  1909.  ---descriptor management---
  1910.     AX = 0200h allocate descriptors
  1911.         CX = number of descriptors to allocate
  1912.         Return: CF clear if successful
  1913.                 AX = selector for first descriptor allocated
  1914.             CF set on error
  1915.                 AX = error code (see #2444)
  1916.     AX = 0201h free a descriptor
  1917.         BX = selector for descriptor
  1918.         Return: CF clear if successful
  1919.             CF set on error
  1920.                 AX = error code (see #2444)
  1921.     AX = 0202h create alias descriptor
  1922.         BX = selector for descriptor to be aliased
  1923.         Return: CF clear if successful
  1924.                 AX = alias descriptor
  1925.             CF set on error
  1926.                 AX = error code (see #2444)
  1927.     AX = 0203h build alias to real-mode segment
  1928.         BX = descriptor
  1929.         CX = real-mode segment
  1930.         Return: CF clear if successful
  1931.             CF set on error
  1932.                 AX = error code (see #2444)
  1933.     AX = 0204h set descriptor base
  1934.         BX = descriptor
  1935.         CX:DX = base address
  1936.         Return: CF clear if successful
  1937.             CF set on error
  1938.                 AX = error code (see #2444)
  1939.     AX = 0205h set descriptor limit
  1940.         BX = descriptor
  1941.         CX = limit
  1942.         Return: CF clear if successful
  1943.             CF set on error
  1944.                 AX = error code (see #2444)
  1945.     AX = 0206h set descriptor type/attribute
  1946.         BX = descriptor
  1947.         CL = type
  1948.         CH = attribute
  1949.         Return: CF clear if successful
  1950.             CF set on error
  1951.                 AX = error code (see #2444)
  1952.     AX = 0207h get descriptor base
  1953.         BX = descriptor
  1954.         Return: CF clear if successful
  1955.                 CX:DX = base address
  1956.             CF set on error
  1957.                 AX = error code (see #2444)
  1958.  ---linear memory functions---
  1959.     AX = 0300h get size of largest free block of memory
  1960.         Return: CF clear if successful
  1961.                 BX:CX = size
  1962.             CF set on error
  1963.                 AX = error code (see #2444)
  1964.     AX = 0301h allocate block of extended memory
  1965.         BX:CX = required size
  1966.         Return: CF clear if successful
  1967.                 BX:CX = base address
  1968.                 SI:DI = handle
  1969.             CF set on error
  1970.                 AX = error code (see #2444)
  1971.     AX = 0302h free block of extended memory
  1972.         SI:DI = handle
  1973.         Return: CF clear if successful
  1974.             CF set on error
  1975.                 AX = error code (see #2444)
  1976.     AX = 0303h map linear memory
  1977.         ES:(E)DI -> DDS (see #2447)
  1978.         Return: CF clear if successful
  1979.                 BX:CX = base address
  1980.                 SI:DI = handle
  1981.             CF set on error
  1982.                 AX = error code (see #2444)
  1983.     AX = 0304h unmap linear memory
  1984.         SI:DI = handle
  1985.         Return: CF clear if successful
  1986.             CF set on error
  1987.                 AX = error code (see #2444)
  1988.     AX = 0305h get page table entries
  1989.         ESI = linear address
  1990.         (E)CX = count
  1991.         ES:(E)DI -> buffer for page table entries
  1992.         Return: CF clear if successful
  1993.                 ES:(E)DI buffer filled
  1994.             CF set on error
  1995.                 AX = error code (see #2444)
  1996.     AX = 0306h set page table entries
  1997.         EBX = linear memory handle
  1998.         ESI = linear address
  1999.         (E)CX = count
  2000.         ES:(E)DI -> buffer containing page table entries
  2001.         Return: CF clear if successful
  2002.             CF set on error
  2003.                 AX = error code (see #2444)
  2004.     AX = 0307h get largest mappable block size
  2005.         Return: CF clear if successful
  2006.                 BX:CX = size
  2007.             CF set on error
  2008.                 AX = error code (see #2444)
  2009.  ---miscellaneous---
  2010.     AX = 0400h relocate segment to extended memory
  2011.         ES:SI = base address
  2012.         CX = limit
  2013.         BL = type
  2014.         BH = attribute
  2015.         DX = selector or 0000h
  2016.         Return: CF clear if successful
  2017.                 AX = selector
  2018.                 BX:CX = new base address
  2019.                 SI:DI = handle
  2020.             CF set on error
  2021.                 AX = error code (see #2444)
  2022. Note:    the beta DPMS specification, which is still supported by the Novell
  2023.       DOS 7.0 DPMS host, only supported functions 0100h-0103h, 0200h-0207h,
  2024.       0300h-0304h, and 0400h
  2025.  
  2026. (Table 2444)
  2027. Values for DPMS error code:
  2028.  8000h    general error
  2029.  8001h    unsupported function
  2030.  8002h    unable to switch to protected mode
  2031.  8004h    no default stack defined
  2032.  8005h    unknown client
  2033.  8010h    resource unavailable
  2034.  8011h    descriptor unavailable
  2035.  8012h    linear memory unavailable
  2036.  8013h    physical memory unavailable
  2037.  8021h    invalid value
  2038.  8022h    invalid selector
  2039.  8023h    invalid handle
  2040.  8025h    invalid linear address
  2041.  
  2042. Format of DPMS callup/down register structure:
  2043. Offset    Size    Description    (Table 2445)
  2044.  00h    DWORD    EDI
  2045.  04h    DWORD    ESI
  2046.  08h    DWORD    EBP
  2047.  0Ch  4 BYTEs    reserved (0) (ESP, may be used by DPMS server)
  2048.  10h    DWORD    EBX
  2049.  14h    DWORD    EDX
  2050.  18h    DWORD    ECX
  2051.  20h    DWORD    EAX
  2052.  24h    DWORD    EIP
  2053.  28h    WORD    CS
  2054.  2Ah  2 BYTEs    reserved (0)
  2055.  2Ch    DWORD    EFLAGS
  2056.  30h    DWORD    ESP
  2057.  34h    WORD    SS
  2058.  36h  2 BYTEs    reserved (0)
  2059.  38h    WORD    ES
  2060.  3Ah  2 BYTEs    reserved (0)
  2061.  3Ch    WORD    DS
  2062.  3Eh  2 BYTEs    reserved (0)
  2063.  40h    WORD    FS
  2064.  42h  2 BYTEs    reserved (0)
  2065.  44h    WORD    GS
  2066.  46h  2 BYTEs    reserved (0)
  2067.  
  2068. Format of DPMS default register structure:
  2069. Offset    Size    Description    (Table 2446)
  2070.  00h    DWORD    EIP
  2071.  04h    WORD    CS
  2072.  06h  2 BYTEs    reserved (0)
  2073.  08h    WORD    number of words to copy from stack to stack
  2074.  0Ah    BYTE    (call) 00h
  2075.         (ret) nonzero if call could not be made
  2076.  0Bh    BYTE    reserved (may be used by some servers)
  2077.  0Ch    DWORD    ESP
  2078.  10h    WORD    SS
  2079.  12h  2 BYTEs    reserved (0)
  2080.  14h    WORD    ES
  2081.  16h  2 BYTEs    reserved (0)
  2082.  18h    WORD    DS
  2083.  1Ah  2 BYTEs    reserved (0)
  2084.  1Ch    WORD    FS
  2085.  1Eh  2 BYTEs    reserved (0)
  2086.  20h    WORD    GS
  2087.  22h  2 BYTEs    reserved (0)
  2088.  24h  9 BYTEs    API entry code (filled in by server)
  2089.  
  2090. Format of DPMS lock DDS:
  2091. Offset    Size    Description    (Table 2447)
  2092.  00h    DWORD    total size in bytes
  2093.  04h    DWORD    offset
  2094.  08h    WORD    segment or selector
  2095.  0Ah    WORD    reserved
  2096.  0Ch    WORD    maximum number of physical blocks structure has space for
  2097.  0Eh    WORD    number of physical blocks listed
  2098.  10h    DWORD    physical address of first block
  2099.  14h    DWORD    size in bytes of first block
  2100.     ...
  2101. --------m-2F43E2-----------------------------
  2102. INT 2F - DOS Protected Mode Services (DPMS) v1.0 - ENABLE/DISABLE DPMS
  2103.     AX = 43E2h
  2104.     BX = new state (0000h disable, 0001h enable)
  2105. Return: AX = 0000h if supported
  2106. Note:    this function should normally be called only by system software
  2107. SeeAlso: AX=43E0h,AX=43E1h,AX=43E3h
  2108. --------m-2F43E3BX0000-----------------------
  2109. INT 2F - DOS Protected Mode Services (DPMS) v1.0 - DPMS STARTUP BROADCAST
  2110.     AX = 43E3h
  2111.     BX = 0000h
  2112.     CX = 4450h ('DP')
  2113.     DX = 4D53h ('MS')
  2114. SeeAlso: AX=43E0h,AX=43E4h
  2115. --------m-2F43E4BX0000-----------------------
  2116. INT 2F - DOS Protected Mode Services (DPMS) v1.0 - DPMS EXIT BROADCAST
  2117.     AX = 43E4h
  2118.     BX = 0000h
  2119.     CX = 4450h ('DP')
  2120.     DX = 4D53h ('MS')
  2121. SeeAlso: AX=43E0h,AX=43E3h
  2122. --------E-2F44-------------------------------
  2123. INT 2F U - DOS Extender support???
  2124.     AH = 44h
  2125.     AL = function (at least 0Bh, 15h, 17h)
  2126.     ???
  2127. Return: ???
  2128. Note:    called by Codeview for Windows
  2129. SeeAlso: AH=86h
  2130. --------G-2F4500-----------------------------
  2131. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - INSTALLATION CHECK
  2132.     AX = 4500h
  2133. Return: AL = installation status
  2134.         01h if PROF.COM installed
  2135.         02h if VPROD.386 installed
  2136. SeeAlso: AX=4501h,AX=4502h
  2137. --------G-2F4501-----------------------------
  2138. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - SETUP PROFILER
  2139.     AX = 4501h
  2140.     BX = CSIPS buffer size in KB (first parameter for ProfSetup)
  2141.     CX = output limit in KB (second parameter for ProfSetup)
  2142. Note:    this call is not supported by PROF.COM
  2143. SeeAlso: AX=4502h,AX=4503h
  2144. --------G-2F4502-----------------------------
  2145. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - SET SAMPLING RATE
  2146.     AX = 4502h
  2147.     BL = sampling rate for PROF.COM (0 < BL <= 13)
  2148.         (01h = 8192/s, 04h = 1024/s, 08h = 32/s, 0Dh = 1/s)
  2149.     CX = sampling rate for VPROD.386
  2150. Note:    for PROF.COM, this programs the CMOS clock by setting BL+2 as the
  2151.       low four bits of CMOS register 0Ah.  The interruption rate is
  2152.       1 SHL (15 - BL) per second.
  2153. SeeAlso: AX=4501h,AX=4503h
  2154. --------G-2F4503-----------------------------
  2155. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - START PROFILING
  2156.     AX = 4503h
  2157. Notes:    Profiling is also turned on by the key combinations
  2158.       LeftShift + RightShift + Alt and LeftShift + RightShift + Ctrl
  2159.     for PROF.COM, this call programs the CMOS clock by reading register
  2160.       0Ch, and setting bit 6 of register 0Bh.  It then makes sure that IRQ8
  2161.       is unmasked
  2162. SeeAlso: AX=4504h
  2163. --------G-2F4504-----------------------------
  2164. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - STOP PROFILING
  2165.     AX = 4504h
  2166. Notes:    profiling is also turned off by the key combination
  2167.       LeftShift + RightShift
  2168.     for PROF.COM, this programs the CMOS clock by reading register 0Ch
  2169.       and clearing bit 6 of register 0Bh.  It then masks IRQ8.
  2170. SeeAlso: AX=4503h,AX=4505h,AX=4506h,AX=4507h
  2171. --------G-2F4505-----------------------------
  2172. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - CLEAR PROFILING DATA
  2173.     AX = 4505h
  2174. SeeAlso: AX=4503h,AX=4504h,AX=4506h
  2175. --------G-2F4506-----------------------------
  2176. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - "ProfFlush"
  2177.     AX = 4506h
  2178. SeeAlso: AX=4505h,AX=4507h
  2179. --------G-2F4507-----------------------------
  2180. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - "ProfFinish"
  2181.     AX = 4507h
  2182. Note:    this call is essentially a "ProfStop" (AX=4504h) followed by
  2183.       "ProfFlush" (AX=4506h)
  2184. SeeAlso: AX=4504h,AX=4505h,AX=4506h
  2185. --------G-2F4508-----------------------------
  2186. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - ALTERNATE SEGDEBUG IFACE
  2187.     AX = 4508h
  2188.     BX = ordinal (or 0000h)
  2189.     CX = segment
  2190.     DX = instance (or 0000h)
  2191.     SI = type (or 0000h)
  2192.     ES:DI -> ASCIZ module name
  2193. Notes:    this call is an alternate entry to the profiler's SEGDEBUG
  2194.       interface, but only to function 0, for notifying the profiler of
  2195.       each new segment loaded.  The SHOWHITS utility then examines the
  2196.       profiler's output files (CSIPS.DAT and SEGENTRY.DAT) in conjunction
  2197.       with symbol files to provide information in a useful form.
  2198.     this call does not have a corresponding Windows function
  2199. SeeAlso: AX=4500h
  2200. --------D-2F4601-----------------------------
  2201. INT 2F CU - MS Windows WINOLDAP - SWITCHING ???
  2202.     AX = 4601h
  2203. Return: ???
  2204. Note:    the DOS 5+ kernel intercepts this function and copies the MCB
  2205.        following the caller's PSP memory block into the DOS data segment;
  2206.        in conjunction with AX=4602h, this intercept is used by DOS to
  2207.        avoid corruption of the Windows real-mode heap's end sentinel
  2208. SeeAlso: AX=1700h,AX=4602h
  2209. --------D-2F4602-----------------------------
  2210. INT 2F CU - MS Windows WINOLDAP - SWITCHING ???
  2211.     AX = 4602h
  2212. Return: ???
  2213. Note:    the DOS 5+ kernel intercepts this function and copies the
  2214.       previously-saved MCB from the DOS data segment into the MCB following
  2215.       the caller's PSP memory block; in conjunction with AX=4601h, this
  2216.       intercept is used by DOS to avoid corruption of the Windows real-mode
  2217.       heap's end sentinel
  2218. SeeAlso: AX=1700h,AX=4601h
  2219. --------E-2F46-------------------------------
  2220. INT 2F U - Windows/286 DOS Extender
  2221.     AH = 46h
  2222.     AL = subfunction (03h,04h)
  2223. Return: ???
  2224. Note:    these two subfunctions are called by MS Windows 3.0
  2225. --------v-2F4653CX0002-----------------------
  2226. INT 2F - F-PROT v1.x only - F-LOCK.EXE - API
  2227.     AX = 4653h ('FS')
  2228.     CX = 0002h
  2229.     BX = subfunction
  2230.         0000h  installation check
  2231.         Return: AX = FFFFh
  2232.         0001h  uninstall
  2233.         Return: AX,BX,ES destroyed
  2234.         0002h  disable (v1.08 and below only)
  2235.         0003h  enable (v1.08 and below only)
  2236. Program: F-LOCK is part of the shareware F-PROT virus/trojan protection
  2237.       package by Fridrik Skulason
  2238. SeeAlso: AX=4653h/CX=0003h,AX=CA00h,INT 21/AX=4BEEh
  2239. Index:    installation check;F-LOCK|uninstall;F-LOCK
  2240. --------v-2F4653CX0003-----------------------
  2241. INT 2F - F-PROT v1.x only - F-XCHK.EXE - API
  2242.     AX = 4653h ('FS')
  2243.     CX = 0003h
  2244.     BX = subfunction
  2245.         0000h  installation check
  2246.         Return: AX = FFFFh
  2247.         0001h  uninstall
  2248.         Return: AX,BX,ES destroyed
  2249. Program: F-XCHK is part of the shareware F-PROT virus/trojan protection
  2250.       package by Fridrik Skulason
  2251. SeeAlso: AX=4653h/CX=0002h,AX=4653h/CX=0004h,AX=CA00h
  2252. Index:    installation check;F-XCHK|uninstall;F-XCHK
  2253. --------v-2F4653CX0004-----------------------
  2254. INT 2F - F-PROT v1.x only - F-POPUP.EXE - API
  2255.     AX = 4653h ('FS')
  2256.     CX = 0004h
  2257.     BX = subfunction
  2258.         0000h  installation check
  2259.         Return: AX = FFFFh
  2260.         0001h  uninstall
  2261.         Return: AX,BX,ES destroyed
  2262.         0002h  disable (v1.08 and below only)
  2263.            display message (v1.14+)
  2264.             other registers: ???
  2265.         0003h  enable (v1.08 and below only)
  2266.            display message (v1.14+)
  2267.             other registers: ???
  2268.             Return: AX = key pressed by user
  2269. Program: F-POPUP is part of the shareware F-PROT virus/trojan protection
  2270.       package by Fridrik Skulason
  2271. SeeAlso: AX=4653h/CX=0003h,AX=4653h/CX=0005h,AX=CA00h
  2272. Index:    installation check;F-POPUP|uninstall;F-POPUP
  2273. --------v-2F4653CX0005-----------------------
  2274. INT 2F - F-PROT v1.x only - F-DLOCK.EXE - API
  2275.     AX = 4653h ('FS')
  2276.     CX = 0005h
  2277.     BX = subfunction
  2278.         0000h installation check
  2279.         Return: AX = FFFFh
  2280.         0001h uninstall
  2281.         Return: AX,BX,ES destroyed
  2282. Program: F-DLOCK is part of the shareware F-PROT virus/trojan protection
  2283.       package by Fridrik Skulason
  2284. SeeAlso: AX=4653h/CX=0004h,AX=CA00h
  2285. Index:    installation check;F-DLOCK|uninstall;F-DLOCK
  2286. ----------2F4653CX0007-----------------------
  2287. INT 2F - F-PROT v2.x - VIRSTOP - ENABLE/DISABLE BOOTSECTOR READ CHECKING
  2288.     AX = 4653h ('FS')
  2289.     CX = 0007h
  2290.     BL = new state of bootsector checking (01h = disabled)
  2291. Program: VIRSTOP is the resident virus-checker from Fridrik Skulason's F-PROT
  2292.       virus/trojan protection package
  2293. ----------2F4653CX0008-----------------------
  2294. INT 2F - F-PROT v2.x - ???
  2295.     AX = 4653h ('FS')
  2296.     CX = 0008h
  2297.     ???
  2298. Return: ???
  2299. Note:    called by F-PROT v2.x VIRSTOP
  2300. ----------2F4653CX0008-----------------------
  2301. INT 2F - F-PROT v2.x - VIRSTOP - INSTALLATION CHECK
  2302.     AX = 4653h ('FS')
  2303.     CX = 0008h
  2304. Return: AX = 5346h if installed
  2305.         BX = version???
  2306.         DS:SI -> ASCIZ name of file containing virus signatures
  2307.         DS:DI -> 80-byte buffer for ???
  2308. --------W-2F4680-----------------------------
  2309. INT 2F U - MS Windows v3.0 - INSTALLATION CHECK
  2310.     AX = 4680h
  2311. Return: AX = result
  2312.         0000h MS Windows 3.0 running in real (/R) or standard (/S) mode,
  2313.           or DOS 5 DOSSHELL active
  2314.         nonzero  no Windows, Windows prior to 3.0, or Windows3 in enhanced
  2315.           mode
  2316. Note:    Windows 3.1 finally provides an installation check which works in all
  2317.       modes (see AX=160Ah)
  2318. SeeAlso: AX=1600h,AX=160Ah
  2319. ----------2F47-------------------------------
  2320. INT 2F U - ???
  2321.     AH = 47h
  2322.     ???
  2323. Return: ???
  2324. Note:    reportedly called by Microsoft BASIC Compiler v7.0
  2325. --------K-2F4800-----------------------------
  2326. INT 2F - DOS 5+ DOSKEY - INSTALLATION CHECK
  2327.     AX = 4800h
  2328. Return: AL = nonzero if installed (DOS 5.0 and 6.0 return AX=AA02h)
  2329.         ES = segment of DOSKEY resident portion
  2330. Note:    DOSKEY chains if AL is not 00h or 10h on entry
  2331. SeeAlso: AX=4800h"PCED",AX=4810h
  2332. --------K-2F4800-----------------------------
  2333. INT 2F - PCED v2.1 - INSTALLATION CHECK
  2334.     AX = 4800h
  2335. Return: AX = AACDh if installed
  2336.         ES = segment of PCED kernel (PCED has multiple code segments)
  2337. Program: PCED v2.1 is a command line editor/history/macro facility by
  2338.       Cove Software.  It is the commercial version of the freeware CED.
  2339. Notes:    DOSKEY also responds to this call if installed, returning AX=AA02h.
  2340.     unlike DOSKEY, PCED does *not* chain if AL contains an
  2341.       unsupported function code.  It IRETs with all registers intact.
  2342. --------K-2F4810-----------------------------
  2343. INT 2F - DOS 5+ DOSKEY, PCED v2.1 - READ INPUT LINE FROM CONSOLE
  2344.     AX = 4810h
  2345.     DS:DX -> line buffer (see #0999 at INT 21/AH=0Ah)
  2346. Return: AX = 0000h if successful
  2347. Notes:    the first byte (length) of the buffer MUST be 80h, or DOSKEY chains to
  2348.       the previous handler; PCED allows sizes other than 80h
  2349.     if the user's input is a macro name, no text is placed in the buffer
  2350.       even though AX=0000h on return; the program must immediately issue
  2351.       this call again to retrieve the expansion of the macro.  Similarly,
  2352.       if the user enters a special parameter such as $*, this call must
  2353.       be repeated to retrieve the expansion; on the second call, DOSKEY
  2354.       overwrites the macro name on the screen with its expansion.
  2355.     unlike DOSKEY, PCED expands all macros on the first call, so it is
  2356.       not necessary to make two calls; since the buffer is not empty on
  2357.       return, DOSKEY-aware programs will not make the second call
  2358.     DOSKEY chains if AL is not 00h or 10h on entry
  2359. SeeAlso: AX=4800h,INT 21/AH=0Ah
  2360. --------K-2F48C0-----------------------------
  2361. INT 2F - PCED v2.1 - PCED API
  2362.     AX = 48C0h
  2363.     DX = API function code
  2364.     other registers as required by the specified function
  2365. Return: CF clear if successful
  2366.     CF set on error
  2367.         AX = PCED error code
  2368.     other registers as appropriate for API function
  2369. Program: PCED v2.1 is a command line editor/history/macro facility by
  2370.       Cove Software.  It is the commercial version of the freeware CED.
  2371. Note:    the full API information is available from Cove Software
  2372. SeeAlso: AX=4800h"PCED",AX=48C1h,AX=48C2h,AX=48C3h
  2373. --------U-2F48C1BL00-------------------------
  2374. INT 2F - PCED/VSTACK - INSTALLATION CHECK
  2375.     AX = 48C1h
  2376.     BL = 00h
  2377. Return: AX = 0000h if installed
  2378.         BX = VSTACK resident segment
  2379. Program: VSTACK is a resident backscroll utility included as part of the PCED
  2380.       package by Cove Software
  2381. Note:    chains if BL <> 00h on entry
  2382. SeeAlso: AX=48C0h,AX=48C2h
  2383. --------U-2F48C2BL00-------------------------
  2384. INT 2F - PCED/ATTRIB - INSTALLATION CHECK
  2385.     AX = 48C2h
  2386.     BL = 00h
  2387. Return: AX = 0000h if installed
  2388.         BX = ATTRIB resident segment
  2389. Program: ATTRIB is a resident file attribute changer included as part of the
  2390.       PCED package by Cove Software
  2391. Note:    chains if BL <> 00h on entry
  2392. SeeAlso: AX=48C0h,AX=48C1h,AX=48C3h
  2393. --------K-2F48C3BL00-------------------------
  2394. INT 2F - PCED/KEYDEF - INSTALLATION CHECK
  2395.     AX = 48C3h
  2396.     BL = 00h
  2397. Return: AX = 0000h if installed
  2398.         BX = KEYDEF resident segment
  2399. Program: KEYDEF is a resident keyboard redefinition utility included as part
  2400.       of the PCED package by Cove Software
  2401. Note:    chains if BL <> 00h on entry
  2402. SeeAlso: AX=48C0h,AX=48C2h,AX=48C4h
  2403. --------U-2F48C4BL00-------------------------
  2404. INT 2F - PCED/FLIST - INSTALLATION CHECK
  2405.     AX = 48C4h
  2406.     BL = 00h
  2407. Return: AX = 0000h if installed
  2408.         BX = FLIST resident segment
  2409. Program: FLIST is a resident filelist processor included as part of the PCED
  2410.       package by Cove Software
  2411. Note:    chains if BL <> 00h on entry
  2412. SeeAlso: AX=48C0h,AX=48C3h,AX=48C5h
  2413. --------U-2F48C5BL00-------------------------
  2414. INT 2F - PCED/ASSOC - INSTALLATION CHECK
  2415.     AX = 48C5h
  2416.     BL = 00h
  2417. Return: AX = 0000h if installed
  2418.         BX = ASSOC resident segment
  2419. Program: ASSOC is a resident utility included as part of the PCED package which
  2420.       associates files with executable programs based on their extensions
  2421. Note:    chains if BL > 02h on entry
  2422. SeeAlso: AX=48C0h,AX=48C4h,AX=48C5h/BL=01h,AX=48C5h/BL=02h
  2423. --------U-2F48C5BL01-------------------------
  2424. INT 2F - PCED/ASSOC - GET VERSION
  2425.     AX = 48C5h
  2426.     BL = 01h
  2427. Return: AX = 0000h if installed
  2428.         BX = binary ASSOC version (BL = major, BH = minor)
  2429. Note:    chains if BL > 02h on entry
  2430. SeeAlso: AX=48C0h,AX=48C5h/BL=00h,AX=48C5h/BL=02h
  2431. --------U-2F48C5BL02-------------------------
  2432. INT 2F - PCED/ASSOC - ASSOCIATION TEST
  2433.     AX = 48C5h
  2434.     BL = 02h
  2435.     DS:SI -> ASCIZ filename
  2436. Return: AX = status
  2437.         0000h if filename is unknown
  2438.         0001h if there is an association defined for the file
  2439.     BX destroyed
  2440. Program: ASSOC is a resident utility included as part of the PCED package which
  2441.       associates files with executable programs based on their extensions
  2442. Note:    chains if BL > 02h on entry
  2443. SeeAlso: AX=48C0h,AX=48C5h/BL=00h,AX=48C5h/BL=01h
  2444. ----------2F49-------------------------------
  2445. INT 2F U - ???
  2446.     AH = 49h
  2447.     ???
  2448. Return: ???
  2449. Note:    reportedly called by DOS 5.0 installation
  2450. --------D-2F4A00CX0000-----------------------
  2451. INT 2F CU - DOS 5+ - FLOPPY-DISK LOGICAL DRIVE CHANGE NOTIFICATION
  2452.     AX = 4A00h
  2453.     CX = 0000h
  2454.     DH = new drive number
  2455.     DL = current drive number
  2456. Return: CX = FFFFh to skip "Insert diskette for drive X:" message
  2457. Note:    called by MS-DOS 5.0+ IO.SYS just before displaying the message
  2458.       "Insert diskette for drive X:" on single-floppy systems
  2459. --------D-2F4A01-----------------------------
  2460. INT 2F - DOS 5+ - QUERY FREE HMA SPACE
  2461.     AX = 4A01h
  2462. Return: BX = number of bytes available in HMA (0000h if DOS not using HMA)
  2463.     ES:DI -> start of available HMA area (FFFFh:FFFFh if not using HMA)
  2464. Notes:    called by Windows 3.1 DOSX.EXE
  2465.     supported by Novell DOS 7
  2466. SeeAlso: AX=4310h,AX=4A02h
  2467. --------D-2F4A02-----------------------------
  2468. INT 2F - DOS 5+ - ALLOCATE HMA SPACE
  2469.     AX = 4A02h
  2470.     BX = number of bytes
  2471. Return: ES:DI -> start of allocated HMA block or FFFFh:FFFFh
  2472.     BX = number of bytes actually allocated (rounded up to next paragraph
  2473.           for DOS 5.0 and 6.0)
  2474. Notes:    this call is not valid unless DOS is loaded in the HMA (DOS=HIGH)
  2475.     called by Windows 3.1 DOSX.EXE
  2476.     supported by Novell DOS 7
  2477. SeeAlso: AX=4A01h
  2478. --------T-2F4A05-----------------------------
  2479. INT 2F U - DOS 5+ DOSSHELL - TASK SWITCHING API???
  2480.     AX = 4A05h
  2481.     SI = function
  2482.         0000h reset???
  2483.         0001h ???
  2484.         ES:BP -> 80-byte buffer containing ???
  2485.         0002h ???
  2486.         0003h ???
  2487.         0004h ???
  2488.         BL = ???
  2489.         0005h ???
  2490.         0006h get ???
  2491.         Return: ES:SI -> ???
  2492.         0007h get ???
  2493.         Return: AX = ???
  2494.         0008h get ???
  2495.         Return: DX:AX -> ??? (internal control data of some kind)
  2496.         0009h get ???
  2497.         Return: ES:SI -> ??? (apparently identical to function 0006h)
  2498.         000Ah ???
  2499.         BL = length of buffer
  2500.         ES:BP -> buffer containing ???
  2501.         000Bh get ???
  2502.         Return: AX = ???
  2503.         000Ch ???
  2504.         BL = ???
  2505.         Return: if BL nonzero on entry
  2506.                 DX:AX -> ???
  2507.             if BL = 00h on entry
  2508.                 ES:SI -> ???
  2509. Notes:    DOSSHELL chains to the previous handler if SI is not one of the values
  2510.       listed above
  2511.     the DOSSWAP.EXE module calls functions 03h,04h,05h,07h,08h,09h,0Ch
  2512.     the Windows 3.1 DSWAP.EXE and WSWAP.EXE task switchers use these calls
  2513. SeeAlso: AX=4B01h
  2514. --------D-2F4A06-----------------------------
  2515. INT 2F CU - DOS 5+ - DOS SUPERVISOR "REBOOT PANEL" - ADJUST MEMORY SIZE
  2516.     AX = 4A06h
  2517.     DX = segment following last byte of conventional memory
  2518. Return: DX = segment following last byte of memory available for use by DOS
  2519. Desc:    used to override the default memory size when booting diskless
  2520.       workstations
  2521. Notes:    called by MS-DOS 5+ IO.SYS startup code if the signature "RPL" is
  2522.       present three bytes beyond the INT 2F handler; this call overrides
  2523.       the value returned by INT 12
  2524.     hooked by RPL code at the top of memory to protect itself from being
  2525.       overwritten; DOS builds a memory block with owner = 0008h and name
  2526.       "RPL" which must be freed by the RPL code when it is done
  2527. SeeAlso: INT 12"BIOS",INT 18"BOOT HOOK"
  2528. --------N-2F4A07-----------------------------
  2529. INT 2F U - RESERVED FOR PROTMAN SUPPORT
  2530.     AX = 4A07h
  2531.     ???
  2532. Return: ???
  2533. --------c-2F4A10BX0000-----------------------
  2534. INT 2F - SMARTDRV v4.00+ - INSTALLATION CHECK AND HIT RATIOS
  2535.     AX = 4A10h
  2536.     BX = 0000h
  2537.     CX = EBABh (v4.1+; see Note)
  2538. Return: AX = BABEh if installed
  2539.         DX:BX = cache hits
  2540.         DI:SI = cache misses
  2541.         CX = number of dirty cache elements
  2542.         BP = version in BCD (4.10 = 0410h)
  2543. Notes:    most of the SMARTDRV API, including this call, is supported by
  2544.       PC-Cache v8.0 and recent versions of the Norton Caches
  2545.     if DBLSPACE.BIN is installed but SMARTDRV has not yet been installed,
  2546.       then calls of this function with CX<>EBABh on entry cause
  2547.       DBLSPACE.BIN to display the error message
  2548.       "Cannot run SMARTDrive 4.0 with DoubleSpace" and abort the caller
  2549.       with INT 21/AX=4C00h
  2550.     SMARTDRV v3.x had a completely different API using IOCTL calls, which
  2551.       was also supported by the Norton Caches
  2552. SeeAlso: AX=4A10h/BX=0001h,AX=4A10h/BX=0004h,AX=4A10h/BX=0005h
  2553. SeeAlso: AX=4A10h/BX=0007h,AX=4A10h/BX=1234h,AX=4A11h/BX=0000h
  2554. SeeAlso: INT 21/AX=4402h"SMARTDRV",INT 21/AX=4403h"SMARTDRV"
  2555. --------c-2F4A10BX0000-----------------------
  2556. INT 2F U - Novell NWCACHE - ???
  2557.     AX = 4A10h
  2558.     BX = 0000h
  2559.     CX = 0EDCh ('EDC' = Novell European Development Center)
  2560. Return: ???
  2561. SeeAlso: AX=4A10h/BX=0001h"NWCACHE"
  2562. --------c-2F4A10BX0001-----------------------
  2563. INT 2F - SMARTDRV v4.00+ - FLUSH BUFFERS (COMMIT CACHE)
  2564.     AX = 4A10h
  2565.     BX = 0001h
  2566. Note:    this function is also supported by PC-Cache v8.0.
  2567. SeeAlso: AX=4A10h/BX=0000h,AX=4A10h/BX=0002h,INT 21/AH=0Dh
  2568. --------c-2F4A10BX0001-----------------------
  2569. INT 2F U - Novell NWCACHE - ???
  2570.     AX = 4A10h
  2571.     BX = 0001h
  2572.     CX = 0EDCh ('EDC' = Novell European Development Center)
  2573. Return: ???
  2574. SeeAlso: AX=4A10h/BX=0000h"NWCACHE"
  2575. --------c-2F4A10BX0002-----------------------
  2576. INT 2F - SMARTDRV v4.00+ - RESET CACHE
  2577.     AX = 4A10h
  2578.     BX = 0002h
  2579. Note:    this function is also supported by PC-Cache v8.0.
  2580. SeeAlso: AX=4A10h/BX=0000h,AX=4A10h/BX=0001h
  2581. --------c-2F4A10BX0003-----------------------
  2582. INT 2F - SMARTDRV v4.00+ - STATUS
  2583.     AX = 4A10h
  2584.     BX = 0003h
  2585.     BP = drive number (0=A, 1=B, etc.)
  2586.     DL = subfunction
  2587.         00h only get information
  2588.         01h turn on read cache
  2589.         02h turn off read cache
  2590.         03h turn on write cache
  2591.         04h turn off write cache
  2592.         ---NWCACHE---
  2593.         05h ???
  2594.         06h ???
  2595. Return: AX = BABEh if OK
  2596.     DL = status (see #2448)
  2597.     DL = FFh if drive does not exist
  2598. Notes:    If the read cache is off, reads will not be cached, but writes will
  2599.       continue to be cached if the write-cache is enabled.
  2600.     this function is also supported by PC-Cache v8.0.
  2601. SeeAlso: AX=4A10h/BX=0000h
  2602.  
  2603. Bitfields for SMARTDRV status:
  2604. Bit(s)    Description    (Table 2448)
  2605.  7    not cached
  2606.  6    write-through (not write-cached)
  2607.  0-5    real drive number (0=A, 1=B...)
  2608. --------c-2F4A10BX0004-----------------------
  2609. INT 2F - SMARTDRV v4.00+ - GET CACHE SIZE
  2610.     AX = 4A10h
  2611.     BX = 0004h
  2612. Return: AX = size in elements of full-sized cache
  2613.     BX = current size in elements
  2614.     CX = size of one element in bytes
  2615.     DX = number of elements under Windows
  2616. Note:    this function is also supported by PC-Cache v8.0.
  2617. SeeAlso: AX=4A10h/BX=0000h,AX=4A10h/BX=0003h,AX=4A10h/BX=0005h
  2618. --------c-2F4A10BX0005-----------------------
  2619. INT 2F - SMARTDRV v4.00+ - GET DOUBLE-BUFFER STATUS
  2620.     AX = 4A10h
  2621.     BX = 0005h
  2622.     BP = drive number (0=A, 1=B...)
  2623. Return: AX = BABEh if double-buffered
  2624.         ES:DI -> 16-byte array of status bytes for fixed disks (see #2449)
  2625. SeeAlso: AX=4A10h/BX=0000h,AX=4A10h/BX=0003h,AX=4A10h/BX=0006h
  2626.  
  2627. (Table 2449)
  2628. Values for SMARTDRV status byte:
  2629.  00h    state unknown
  2630.  FFh    drive double-buffered
  2631.  else    not double-buffered
  2632. --------c-2F4A10BX0006-----------------------
  2633. INT 2F CU - SMARTDRV v4.00+ - CHECK IF DRIVE CACHEABLE
  2634.     AX = 4A10h
  2635.     BX = 0006h
  2636.     CL = drive number (01h = A:)
  2637. Return: AX = 0006h if drive should not be cached by SMARTDRV
  2638. Note:    called by SMARTDRV at startup to determine whether it should cache
  2639.       a particular drive
  2640. SeeAlso: AX=4A10h/BX=0000h
  2641. --------c-2F4A10BX0007-----------------------
  2642. INT 2F - SMARTDRV v4.00+ - GET DEVICE DRIVER FOR DRIVE
  2643.     AX = 4A10h
  2644.     BX = 0007h
  2645.     BP = drive number (00h=A:)
  2646. Return: DL = unit number within device driver
  2647.     ES:DI -> device driver header for drive (see #1298)
  2648. Note:    this function is also supported by PC-Cache v8.0.
  2649.     this call is reported to always return the driver header of the
  2650.       standard block driver (A:-C:+) for SmartDrive v5.00 from MS-DOS 6.2
  2651. SeeAlso: AX=4A10h/BX=0000h,AX=4A11h/BX=0003h,AX=4A11h/BX=0004h
  2652. --------c-2F4A10BX0008-----------------------
  2653. INT 2F - SMARTDRV v4.20+ - GET/SET FLUSH BEFORE PROMPT, CD-ROM SUPPORT
  2654.     AX = 4A10h
  2655.     BX = 0008h
  2656.     DL = subfunction
  2657.         00h set
  2658.         DH = new states
  2659.             bit 0: flush before prompt
  2660.             bits 1-7 reserved (0)
  2661.         01h get
  2662.         Return: DH = status flags
  2663.                 bit 0: (v4.2+) flush before prompt
  2664.                 bit 1: (v5.0+) CD-ROM caching support installed
  2665. Note:    v4.2 was an interim release to fix problems in the SMARTDRV included
  2666.       with MS-DOS 6.00; v5.00 is included with MS-DOS 6.2
  2667. --------c-2F4A10BX000A-----------------------
  2668. INT 2F - SMARTDRV v4.00+ - GET ELEMENT STATUS TABLE
  2669.     AX = 4A10h
  2670.     BX = 000Ah
  2671. Return: ES:BX -> information pointer table (see #2450)
  2672. Note:    this function is also supported by PC-Cache v8.0.
  2673. SeeAlso: AX=4A10h/BX=0000h
  2674.  
  2675. Format of SMARTDRV information pointer table:
  2676. Offset    Size    Description    (Table 2450)
  2677.  00h    WORD    offset of ??? byte/word array (byte if elements < 2000h bytes)
  2678.  02h    WORD    offset of dirty flag byte/word array (byte if elts < 2000h)
  2679.         each byte/word is a bit string of the dirty sectors in element
  2680.  04h    WORD    offset of word array containing low halves of unique
  2681.           identifiers for the corresponding element's contents
  2682.  06h    WORD    offset of word array containing high halves of unique
  2683.           identifiers for the corresponding element's contents
  2684.  08h    WORD    offset of WORD containing current number of elements in cache
  2685. --------c-2F4A10BX1234-----------------------
  2686. INT 2F - SMARTDRV v4.00+ - SIGNAL SERIOUS ERROR
  2687.     AX = 4A10h
  2688.     BX = 1234h
  2689. Desc:    this function pops up a message box saying that a serious error
  2690.       occurred and to hit R to retry, then waits for the keypress
  2691. Note:    this function is also supported by PC-Cache v8.0.
  2692. SeeAlso: AX=4A10h/BX=0000h
  2693. --------k-2F4A11BX0000-----------------------
  2694. INT 2F - DBLSPACE.BIN - "GetVersion" - INSTALLATION CHECK
  2695.     AX = 4A11h
  2696.     BX = 0000h
  2697. Return: AX = 0000h (successful)
  2698.     BX = 444Dh ("DM")
  2699.     CL = first drive letter used by DBLSPACE (41h ['A'] = A:)
  2700.     CH = number of drive letters used by DBLSPACE
  2701.     DX = internal DBLSPACE.BIN version number (bits 14-0)
  2702.         bit 15 set if DBLSPACE.BIN has not yet been relocated to final
  2703.           position in memory (i.e. DBLSPACE.SYS /MOVE)
  2704. Program: DBLSPACE.BIN is the resident driver for DoubleSpace, the
  2705.       disk-compression software bundled with MS-DOS 6.0 and 6.20
  2706. Notes:    this function is also supported by the version of SuperStor bundled
  2707.       with IBM DOS 6.x and "preloading" versions of Stacker
  2708.     the complete DBLSPACE.BIN API is still supported by MS-DOS 6.22's
  2709.       DRVSPACE.BIN
  2710. SeeAlso: AX=4A11h/BX=0001h,AX=4A11h/BX=0002h,AX=4A11h/BX=0003h
  2711. SeeAlso: AX=4A11h/BX=0005h,AX=4A11h/BX=0007h,AX=4A11h/BX=FFFFh
  2712. SeeAlso: INT 21/AX=4404h"DBLSPACE"
  2713. --------k-2F4A11BX0001-----------------------
  2714. INT 2F - DBLSPACE.BIN - "GetDriveMapping" - GET DRIVE MAPPING
  2715.     AX = 4A11h
  2716.     BX = 0001h
  2717.     DL = drive number (0=A:)
  2718. Return: AX = status (see also #2451)
  2719.         0000h successful
  2720.         if DL was compressed drive,
  2721.             BL = host drive (bit 7 set if drive is compressed)
  2722.         else if DL was host drive,
  2723.             BL = compressed drive
  2724.         else
  2725.             BL = specified drive (if available for DoubleSpace)
  2726.         BH = DoubleSpace sequence number
  2727.         other error code (0101h) (see #2451)
  2728.         apparently never returned for the MS-DOS 6.2 DoubleSpace
  2729. Note:    the compressed volume file for the specified compressed drive is
  2730.       host:\DBLSPACE.sequence
  2731. SeeAlso: AX=4A11h/BX=0000h
  2732.  
  2733. (Table 2451)
  2734. Values for DBLSPACE function status:
  2735.  0000h    successful
  2736.  0100h    bad function
  2737.  0101h    invalid drive
  2738.  0102h    not a compressed drive
  2739.  0103h    drive already swapped
  2740.  0104h    drive not swapped
  2741. --------k-2F4A11BX0002-----------------------
  2742. INT 2F - DBLSPACE.BIN - "Swap Drive" - SWAP DRIVE LETTERS OF CVF AND HOST DRIVE
  2743.     AX = 4A11h
  2744.     BX = 0002h
  2745.     DL = drive number (0=A:) of compressed drive to swap with its host
  2746. Return: AX = status (0000h,0101h,0102h,0103h) (see #2451)
  2747. Note:    this function is intended for use by DBLSPACE.EXE only
  2748. SeeAlso: AX=4A11h/BX=0000h
  2749. --------k-2F4A11BX0003-----------------------
  2750. INT 2F - DBLSPACE.BIN - "DSGetEntryPoints" - GET DEVICE DRIVER ENTRY POINTS
  2751.     AX = 4A11h
  2752.     BX = 0003h
  2753.     CL = drive number (0=A:) of compressed drive
  2754. Return: CL = FFh on error (not compressed drive)
  2755.     CL <> FFh driver unit number of host drive
  2756.         ES:SI -> device driver's strategy routine
  2757.         ES:DI -> device driver's interrupt routine
  2758.     BX destroyed
  2759. Note:    in conjunction with subfunction 0004h, this call allows disk caches
  2760.       like SMARTDRV to apply a device driver wrapper to DoubleSpaced
  2761.       drives just like SMARTDRV applies to regular block devices
  2762. SeeAlso: AX=4A10h/BX=0007h,AX=4A11h/BX=0000h,AX=4A11h/BX=0004h
  2763. --------k-2F4A11BX0004-----------------------
  2764. INT 2F - DBLSPACE.BIN - "DSSetEntryPoints" - SET DEVICE DRIVER ENTRY POINTS
  2765.     AX = 4A11h
  2766.     BX = 0004h
  2767.     CL = drive number (0=A:) of compressed drive
  2768.     DL = unit number for new driver entry points
  2769.     DH = 00h
  2770.     ES:SI -> device driver strategy routine to call for drive
  2771.     ES:DI -> device driver interrupt routine to call for drive
  2772. Return: CL = FFh on error (not a compressed drive)
  2773.     BX destroyed
  2774. Program: DBLSPACE.BIN is the resident driver for DoubleSpace, the
  2775.       disk-compression software bundled with MS-DOS 6.0
  2776. Note:    in conjunction with subfunction 0003h, this call allows disk caches
  2777.       like SMARTDRV to apply a device driver wrapper to DoubleSpaced
  2778.       drives just like SMARTDRV applies to regular block devices
  2779. SeeAlso: AX=4A10h/BX=0007h,AX=4A11h/BX=0000h,AX=4A11h/BX=0003h
  2780. --------k-2F4A11BX0005-----------------------
  2781. INT 2F - DBLSPACE.BIN - "ActivateDrive" - MOUNT COMPRESSED DRIVE
  2782.     AX = 4A11h
  2783.     BX = 0005h
  2784.     DL = drive number (0=A:) to assign to new drive
  2785.     ES:SI -> activation record (see #2452)
  2786. Return: status returned in activation record (see #2453)
  2787. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0006h
  2788.  
  2789. Format of DBLSPACE activation record:
  2790. Offset    Size    Description    (Table 2452)
  2791.  00h  2 BYTEs    signature "MD" (4Dh 44h)
  2792.  02h    BYTE    4Dh ('M') mount command
  2793.  03h    BYTE    error code (set to FFh before calling) (see #2453)
  2794.  04h    BYTE    host drive number (0=A:)
  2795.  05h    ???    DISK_UNIT structure (not documented)
  2796.  
  2797. (Table 2453)
  2798. Values for DBLSPACE Mount error code:
  2799.  00h    successful
  2800.  01h    drive letter not available for DoubleSpace
  2801.  02h    drive letter already in use
  2802.  03h    no more disk units (increase MaxRemovableDrives in .INI)
  2803.  09h    CVF too fragmented
  2804. --------k-2F4A11BX0006-----------------------
  2805. INT 2F - DBLSPACE.BIN - "DeactivateDrive" - UNMOUNT COMPRESSED DRIVE
  2806.     AX = 4A11h
  2807.     BX = 0006h
  2808.     DL = drive number (0=A:) to unmount
  2809. Return: AX = status (0000h,0102h) (see #2451)
  2810. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0005h
  2811. --------k-2F4A11BX0007-----------------------
  2812. INT 2F - DBLSPACE.BIN - "GetDriveSpace" - GET SPACE AVAIL ON COMPRESSED DRIVE
  2813.     AX = 4A11h
  2814.     BX = 0007h
  2815.     DL = compressed drive number (0=A:)
  2816. Return: AX = status (0000h,0102h) (see also #2451)
  2817.         0000h successful
  2818.         DS:SI -> free space record (see #2454)
  2819. Program: DBLSPACE.BIN is the resident driver for DoubleSpace, the
  2820.       disk-compression software bundled with MS-DOS 6.0
  2821. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0008h
  2822.  
  2823. Format of DBLSPACE free space record:
  2824. Offset    Size    Description    (Table 2454)
  2825.  00h    DWORD    total number of sectors in drive's sector heap
  2826.  04h    DWORD    number of free sectors in drive's sector heap
  2827. --------k-2F4A11BX0008-----------------------
  2828. INT 2F - DBLSPACE.BIN - "GetFileFragmentSpace" - GET SIZE OF FRAGMENT HEAP
  2829.     AX = 4A11h
  2830.     BX = 0008h
  2831.     DL = compressed drive number (0=A:)
  2832. Return: AX = status (0000h,0102h) (see also #2451)
  2833.         0000h successful
  2834.         BX = maximum entries in File Fragment heap
  2835.         CX = available entries in File Fragment heap
  2836. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0007h,AX=4A11h/BX=0009h
  2837. --------k-2F4A11BX0009-----------------------
  2838. INT 2F - DBLSPACE.BIN - "GetExtraInfo" - DETERMINE NUMBER OF DISK_UNIT STRUCTS
  2839.     AX = 4A11h
  2840.     BX = 0009h
  2841.     DL = compressed drive number (0=A:)
  2842. Return: AX = status (see also #2451)
  2843.         0000h successful
  2844.         CL = number of DISK_UNIT structures allocated
  2845.               (see AX=4A11h/BX=0005h)
  2846.         CH = DoubleGuard enabled-checks bitflags in bits 6-0 (DOS 6.2)
  2847. Note:    the DoubleGuard checks are enabled or disabled as a block by the
  2848.       DoubleGuard= line in DBLSPACE.INI; they may be individually set with
  2849.       the CheckSum= line.
  2850. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0008h
  2851. --------k-2F4A11BX000A-----------------------
  2852. INT 2F - DBLSPACE.BIN v6.2 - SET AUTOMOUNT DRIVES
  2853.     AX = 4A11h
  2854.     BX = 000Ah
  2855.     CX:DX = bitmask of drives on which to enable AutoMount
  2856.         (DX bit 0 = A:, CX bit 0 = P:, etc.)
  2857. Return: AX = 0000h if supported
  2858.         CX:DX = old mask or 0000h:0000h on error
  2859.     BX destroyed
  2860. SeeAlso: AX=4A11h/BX=000Bh
  2861. --------k-2F4A11BX000B-----------------------
  2862. INT 2F - DBLSPACE.BIN v6.2 - GET AUTOMOUNT DRIVES
  2863.     AX = 4A11h
  2864.     BX = 000Bh
  2865. Return: AX = 0000h if supported
  2866.         CX:DX = mask of drives with AutoMount enabled
  2867.         0000h:0000h on error
  2868.     BX destroyed
  2869. SeeAlso: AX=4A11h/BX=000Ah
  2870. --------k-2F4A11BXFFFE-----------------------
  2871. INT 2F U - DBLSPACE.BIN - RELOCATE
  2872.     AX = 4A11h
  2873.     BX = FFFEh
  2874.     ES = segment to which to relocate DBLSPACE.BIN
  2875. Return: ???
  2876. Notes:    called by DBLSPACE.SYS to relocate DBLSPACE.BIN to its final position
  2877.       in memory
  2878.     this function also unhooks and discards the code providing this
  2879.       function and AX=4A11h/BX=FFFFh
  2880.     this function is also supported by the version of SuperStor bundled
  2881.       with IBM DOS 6.x and "preloading" versions of Stacker
  2882. SeeAlso: AX=4A11h/BX=FFFFh
  2883. --------k-2F4A11BXFFFF-----------------------
  2884. INT 2F U - DBLSPACE.BIN - GET RELOCATION SIZE
  2885.     AX = 4A11h
  2886.     BX = FFFFh
  2887. Return: AX = number of paragraphs needed by DBLSPACE.BIN
  2888. Note:    used by DBLSPACE.SYS to relocate the DBLSPACE driver to its final
  2889.       position in memory
  2890.     this function is also supported by the version of SuperStor bundled
  2891.       with IBM DOS 6.x and "preloading" versions of Stacker
  2892. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=FFFEh
  2893. --------k-2F4A12CX4D52-----------------------
  2894. INT 2F - Microsoft Realtime Compression Interface (MRCI) - RAM-BASED SERVER
  2895.     AX = 4A12h
  2896.     CX = 4D52h ("MR")
  2897.     DX = 4349h ("CI")
  2898. Return: CX = 4943h ("IC") if installed
  2899.     DX = 524Dh ("RM") if installed
  2900.         ES:DI -> MRCINFO structure (see #0642 at INT 1A/AX=B001h)
  2901. Note:    this call is functionally identical to INT 1A/AX=B001h, but should be
  2902.       called first, as the latter call is used for the first, ROM-based
  2903.       MRCI server, while this call is used for RAM-based servers which
  2904.       may be partially or entirely replacing a prior server
  2905. SeeAlso: AX=4A12h/CX=5354h,INT 1A/AX=B001h
  2906. --------k-2F4A12CX5354-----------------------
  2907. INT 2F - Stacker 4 LZS Compression Interface (LZSAPI)
  2908.     AX = 4A12h
  2909.     CX = 5354h ("ST")
  2910.     DX = 4143h ("AC")
  2911. Return: AX = 4F4Bh ("OK") if installed
  2912.     CX = 7374h ("st") if installed
  2913.     DX = 6163h ("ac") if installed
  2914.         ES:DI -> entry point in LZSAPI server (usually, driver
  2915.               STACKER.COM) containing far address of an actual
  2916.               LZSINFO structure (see #2455)
  2917. SeeAlso: AX=4A12h/CX=4D52h,INT 25/AX=CDCDh
  2918.  
  2919. Format of LZSINFO structure:
  2920. Offset    Size    Description    (Table 2455)
  2921.  00h  6 BYTEs    signature "LZSAPI"
  2922.  06h    WORD    server version (200 (0C8h) for Stacker 4 and Stacker Anywhere)
  2923.  08h  4 BYTEs    vendor signature
  2924.         "STAC" = Stac Electronics, Inc.
  2925.  0Ch  6 BYTEs    ???
  2926.  12h    WORD    bit flags: server status/capabilities (see #2456)
  2927.  14h    DWORD    -> Stacker 3.X-compatible compression procedure
  2928.  18h    DWORD    -> Stacker 3.X-compatible decompression procedure
  2929.  1Ch  4 BYTEs    reserved (always set to 0)
  2930.  20h    DWORD    -> incremental Stacker 3.x-compatible compression procedure
  2931.           (see #2457)
  2932.  24h  4 BYTEs    ???
  2933.  28h    DWORD    -> incremental Stacker 3.x-compatible decompression procedure
  2934.           (see #2458)
  2935.  2Ch  4    BYTES    ???
  2936.  30h    DWORD    -> new (Stacker 4) compression procedure
  2937.  34h  4 BYTEs    ???
  2938.  38h    DWORD    -> new (Stacker 4) decompression procedure
  2939. Notes:    Stacker 4 usally keeps two different data-compression algorithms in
  2940.       memory (preferably in XMA):
  2941.         1) new (Stacker 4) data compression algorithm (4K LZ77 with hashing
  2942.           and static Huffman encoding), and
  2943.         2) old (Stacker 3.x-compatible) one (2K LZ77 with hashing), which
  2944.           is used to work with STACVOL files created under older
  2945.           versions of Stacker.
  2946.  
  2947. Bitfields for LZSAPI capabilities:
  2948. Bit(s)    Description    (Table 2456)
  2949.  0    ???
  2950.  1    busy/error flag
  2951.  2-10    ???
  2952.  11    maximum compressor/decompressor presented
  2953.  
  2954. (Table 2457)
  2955. Call Stacker 3.x-style non-incremental functions with:
  2956.     STACK:    DWORD    return address for compress/decompress procedure
  2957.         WORD    compression algorithm parameters (see #2459)
  2958.         WORD    size of destination buffer (in bytes)
  2959.         DWORD    address of destination buffer
  2960.         WORD    size of source buffer (in bytes)
  2961.         DWORD    address of source buffer
  2962. Return: (compression/decompression procedure)
  2963.     AX = size of resulting data in destination buffer
  2964.         0000h if error (either destination buffer too small or error in
  2965.           compressed data)
  2966.  
  2967. (Table 2458)
  2968. Call Stacker 4-style incremental procedures with:
  2969.     STACK:    DWORD    return address for compr./decompr. procedure
  2970.         DWORD    address of LZSSWAP structure (see #2460)
  2971.             if 0000:0000, procedure uses non-incremental technique
  2972.         WORD    compression algorithm parameters (see #2459)
  2973.         WORD    size of destination buffer (in bytes)
  2974.         DWORD    address of destination buffer
  2975.         WORD    size of source buffer (in bytes)
  2976.         DWORD    address of source buffer
  2977.  
  2978. (Table 2459)
  2979. Values for Compression algorithm parameters:
  2980. Value    Compression level (/P=xx parameter)
  2981.  07F9h      1
  2982.  0621h      2
  2983.  0625h      3
  2984.  0665h      4
  2985.  0669h      5
  2986.  06E9h      6
  2987.  06EDh      7
  2988.  07D1h      8
  2989.  07D9h      9
  2990.  
  2991. Format of LZSSWAP structure:
  2992. Offset    Size    Description    (Table 2460)
  2993.  00h  2 BYTEs    signature "CS"
  2994.  02h  6 BYTEs    reserved
  2995.  08h    DWORD    address of destination buffer swapping procedure
  2996.  0Ch    DWORD    address of stack swapping procedure
  2997. --------k-2F4A13-----------------------------
  2998. INT 2F U - DBLSPACE.BIN - GET ??? ENTRY POINTS
  2999.     AX = 4A13h
  3000. Return: AX = 134Ah if supported
  3001.         ES:BX -> entry point record (see #2461)
  3002. SeeAlso: AX=4A11h/BX=0000h
  3003.  
  3004. Format of DBLSPACE entry point record:
  3005. Offset    Size    Description    (Table 2461)
  3006.  00h    DWORD    pointer to FAR function for ???
  3007.  04h  5 BYTEs    FAR JUMP instruction to ???
  3008. ----------2F4A15BX0000-----------------------
  3009. INT 2F - MS EMM386.EXE v4.46+ - INSTALL I/O VIRTUALIZATION HANDLER
  3010.     AX = 4A15h
  3011.     BX = 0000h (function number)
  3012.     DX = starting I/O address
  3013.     EDX high word = ending I/O address
  3014.     CX = number of ports to trap
  3015.     DS:SI -> I/O dispatch table (see #2462)
  3016.     DI = size of client's code and data
  3017. Return: CF clear if successful
  3018.     CF set on error
  3019. Notes:    this interface is only available in virtual-86 mode; the I/O handlers
  3020.       will be called in protected mode
  3021.     only ports 0100h-FFFFh may be trapped; EMM386 reserved ports 0000h-
  3022.       00FFh
  3023.  
  3024. Format of EMM386 I/O dispatch table [array]:
  3025. Offset    Size    Description    (Table 2462)
  3026.  00h    WORD    I/O port offset (added to DX to get actual port number)
  3027.  02h    WORD    offset of I/O handler for port (see #2463)
  3028.  
  3029. (Table 2463)
  3030. Values EMM386 I/O dispatch function is called with:
  3031.     CX = Ring0 code selector for I/O handler's segment
  3032.     DS = Ring0 data selector for I/O handler's segment (alias of CS)
  3033.     EDX = faulting I/O address
  3034.     ECX = direction (00000008h for byte output, 00000000h for byte input)
  3035.     EAX = data in/out
  3036. Return: (via FAR RET)
  3037.     CF clear if I/O access successfully virtualized
  3038.     CF set if access not virtualized (default handler will be called to
  3039.           perform the I/O)
  3040. SeeAlso: #2462
  3041. --------D-2F4A33-----------------------------
  3042. INT 2F - Windows95 - CHECK MS-DOS VERSION 7
  3043.     AX = 4A33h
  3044. Return: AX = 0000h for MS-DOS 7.00+
  3045.         (officially) BX,DX,SI,DS may be destroyed
  3046.         (undoc) DS:DX -> ASCIZ primary shell executable name
  3047.         (undoc) DS:SI -> CONFIG.SYS SHELL= command line (counted string)
  3048.         (undoc) BH = ??? (0000h)
  3049.         (undoc) BL = ??? (0000h)
  3050.     AX nonzero (usually 4A33h) if MS-DOS 6- or other DOS
  3051. SeeAlso: AX=1611h,INT 21/AH=30h
  3052. --------N-2F4B-------------------------------
  3053. INT 2F - LAN Manager 2.0 DOS Enh NETWKSTA.EXE - NETWORK WORKSTATION REDIRECTOR
  3054.     AH = 4Bh
  3055.     ???
  3056. Return: ???
  3057. Note:    LAN Manager enhanced mode adds features beyond the standard redirector
  3058.       file/printer services
  3059. SeeAlso: AX=118Ah,AX=4100h,AH=42h
  3060. --------T-2F4B01-----------------------------
  3061. INT 2F C - DOS 5+ TASK SWITCHER - BUILD CALLOUT CHAIN
  3062.     AX = 4B01h
  3063.     CX:DX -> task switcher entry point (see #2466)
  3064.     ES:BX = 0000h:0000h
  3065. Return: ES:BX -> callback info structure (see #2464) or 0000h:0000h
  3066. Notes:    called by the task switcher
  3067.     this function is hooked by clients which require notification of task
  3068.       switcher activities; the call must first be passed on to the prior
  3069.       handler with registers unchanged using a simulated interrupt.     On
  3070.       return, the client must build a callback info structure and store
  3071.       the returned ES:BX in the "next" field, then return the address of
  3072.       its own callback info structure.
  3073.     a client program must add itself to the notification chain if it
  3074.       provides services to other programs; before terminating, it must
  3075.       remove itself from the chain by calling the task switcher's entry
  3076.       point with AX=0005h (see #2466)
  3077.     the task switcher entry point should not be saved, as it is subject to
  3078.       change and will be provided on any notification call
  3079.     the Windows 3.1 Standard Mode supports this API
  3080. SeeAlso: AX=160Bh,AX=4B02h
  3081.  
  3082. Format of task switcher callback info structure:
  3083. Offset    Size    Description    (Table 2464)
  3084.  00h    DWORD    pointer to next callback info structure
  3085.  04h    DWORD    pointer to notification function (see #2465)
  3086.  08h    DWORD    reserved
  3087.  0Ch    DWORD    address of zero-terminated list of API info structures
  3088.         (see #2468)
  3089.  
  3090. (Table 2465)
  3091. Values task switcher notification function is called with:
  3092.     AX = function
  3093.         0000h switcher initialization
  3094.         Return: AX = status
  3095.                 0000h if OK to load
  3096.                 nonzero to abort task switcher
  3097.         0001h query suspend
  3098.         BX = session ID
  3099.         Return: AX = status
  3100.                 0000h if OK to switch session
  3101.                 0001h if not
  3102.         0002h suspend session
  3103.         BX = session ID
  3104.         interrupts disabled
  3105.         Return: AX = 0000h if OK to switch session
  3106.                = 0001h if not
  3107.         0003h activate session
  3108.         BX = session ID
  3109.         CX = session status flags
  3110.             bit 0: set if first activation of session
  3111.             bits 1-15: reserved (0)
  3112.         interrupts disabled
  3113.         Return: AX = 0000h
  3114.         0004h session active
  3115.         BX = session ID
  3116.         CX = session status flags
  3117.             bit 0: set if first activation of session
  3118.             bits 1-15: reserved (0)
  3119.         Return: AX = 0000h
  3120.         0005h create session
  3121.         BX = session ID
  3122.         Return: AX = 0000h if OK to create session
  3123.                = 0001h if not
  3124.         0006h destroy session
  3125.         BX = session ID
  3126.         Return: AX = 0000h
  3127.         0007h switcher termination
  3128.         BX = flags
  3129.             bit 0: set if calling switcher is only switcher loaded
  3130.             bits 1-15: reserved (0)
  3131.         Return: AX = 0000h
  3132.     ES:DI -> task switcher entry point (see #2466)
  3133. Notes:    function 0000h is generally called by the program which controls or
  3134.       invokes the task switcher, rather than by the task switcher itself;
  3135.       the entry point supplied to this function is not necessarily the
  3136.       entry point to the task switcher itself, and may be 0000h:0000h.  If
  3137.       any client indicates that loading is not possible, all clients will
  3138.       be called with function 0007h; thus it is possible for a client to
  3139.       receive a termination notice without a corresponding initialization
  3140.       notice.
  3141.     except for functions 0002h and 0003h, the notification handler is
  3142.       called with interrupts enabled and may make any INT 21h function
  3143.       call; interrupts must not be enabled in functions 0002h and 0003h
  3144.     function 0007h may be called with ES:DI = 0000h:0000h if the entry
  3145.       point is no longer valid
  3146. --------T-2F4B02BX0000-----------------------
  3147. INT 2F - DOS 5+ TASK SWITCHER - INSTALLATION CHECK
  3148.     AX = 4B02h
  3149.     BX = 0000h
  3150.     ES:DI = 0000h:0000h
  3151. Return: ES:DI = 0000h:0000h if task switcher not loaded
  3152.     ES:DI -> task switcher entry point (see #2466) if loaded
  3153.         AX = 0000h
  3154. Notes:    the returned entry point is that for the most-recently loaded task
  3155.       switcher; the entry points for prior task switchers may be determined
  3156.       with the "get version" call (see #2466)
  3157.     this function is supported by PC Tools v8+ CPTASK
  3158. SeeAlso: AX=4A05h,AX=4B03h
  3159.  
  3160. (Table 2466)
  3161. Call task switcher entry point with:
  3162.     AX = 0000h get version
  3163.         Return: CF clear if successful
  3164.                 AX = 0000h
  3165.                 ES:BX -> task switcher version struct (see #2467)
  3166.             CF set if unsupported function
  3167.     AX = 0001h test memory region
  3168.         ES:DI -> first byte to be tested
  3169.         CX = size of region to test
  3170.         Return: CF clear if successful
  3171.                 AX = memory type of tested region
  3172.                 0000h global
  3173.                 0001h global and local
  3174.                 0002h local (replaced on session switch)
  3175.             CF set if unsupported function
  3176.     AX = 0002h suspend switcher
  3177.         ES:DI -> new task switcher's entry point
  3178.         Return: CF clear if successful
  3179.                 AX = state
  3180.                 0000h switcher has been suspended
  3181.                 0001h switcher not suspended, new switcher must
  3182.                     abort
  3183.                 0002h switcher not suspended, but new switcher
  3184.                     may run anyway
  3185.             CF set if unsupported function
  3186.     AX = 0003h resume switcher
  3187.         ES:DI -> new task switcher's entry point
  3188.         Return: CF clear if successful
  3189.                 AX = 0000h
  3190.             CF set if unsupported function
  3191.     AX = 0004h hook notification chain
  3192.         ES:DI -> callback info structure to be added to chain
  3193.               (see #2464)
  3194.         Return: CF clear if successful
  3195.                 AX = 0000h
  3196.             CF set if unsupported function
  3197.     AX = 0005h unhook notification chain
  3198.         ES:DI -> callback info structure to be removed from chain
  3199.               (see #2464)
  3200.         Return: CF clear if successful
  3201.                 AX = 0000h
  3202.             CF set if unsupported function
  3203.     AX = 0006h query API support
  3204.         BX = asynchronous API identifier
  3205.         Return: CF clear if successful
  3206.                 AX = 0000h
  3207.                 ES:BX -> API info structure (see #2468) for the
  3208.                       client which provides the highest
  3209.                       level of API support
  3210.             CF set if unsupported function
  3211.  
  3212. Format of task switcher version structure:
  3213. Offset    Size    Description    (Table 2467)
  3214.  00h    WORD    major version of supported protocol  (current protocol is 1.0)
  3215.  02h    WORD    minor version of supported protocol
  3216.  04h    WORD    major version of task switcher
  3217.  06h    WORD    minor version of task switcher
  3218.  08h    WORD    task switcher ID (see AX=4B03h)
  3219.  0Ah    WORD    operation flags
  3220.         bit 0: set if task switcher disabled
  3221.         bits 1-15: reserved (0)
  3222.  0Ch    DWORD    pointer to ASCIZ task switcher name
  3223.         ("MS-DOS Shell Task Switcher" for DOSSHELL task switcher)
  3224.  10h    DWORD    pointer to previous task switcher's entry point or 0000h:0000h
  3225.  
  3226. Format of API info structure:
  3227. Offset    Size    Description    (Table 2468)
  3228.  00h    WORD    size of structure in bytes (000Ah)
  3229.  02h    WORD    API identifier
  3230.         0001h NetBIOS
  3231.         0002h 802.2
  3232.         0003h TCP/IP
  3233.         0004h LAN Manager named pipes
  3234.         0005h Novell NetWare IPX
  3235.  04h    WORD    major version \ of highest version of API for which the support
  3236.  06h    WORD    minor version / level specified in the next field is provided
  3237.  08h    WORD    support level
  3238.         0001h minimal support
  3239.         0002h API-level support
  3240.         0003h switcher compatibility
  3241.         0004h seamless compatibility
  3242. --------T-2F4B03-----------------------------
  3243. INT 2F - DOS 5+ TASK SWITCHER - ALLOCATE SWITCHER ID
  3244.     AX = 4B03h
  3245.     ES:DI -> task switcher entry point (see #2466)
  3246. Return: AX = 0000h
  3247.     BX = switcher ID (0001h-000Fh), or 0000h if no more available
  3248. Notes:    if a task switcher has determined that it is the first to be loaded, it
  3249.       must allocate an identifier for itself and provide this function to
  3250.       all subsequent task switchers; if it is not the first to be loaded,
  3251.       it must call this function to allocate an ID.     The switcher ID is
  3252.       used as the high four bits of all session identifiers to ensure
  3253.       unique session IDs.
  3254.     if no more switcher IDs are available, the new task switcher making the
  3255.       call must terminate or disable itself
  3256.     the task switcher providing the identifiers may call the new task
  3257.       switcher's entry point as needed
  3258.     this call is available from within DOSSHELL even if the task switcher
  3259.       is not installed
  3260.     this function is supported by PC Tools v8+ CPTASK, but appears to
  3261.       always return an ID of 0000h
  3262. SeeAlso: AX=4B02h,AX=4B04h
  3263. --------T-2F4B04-----------------------------
  3264. INT 2F - DOS 5+ TASK SWITCHER - FREE SWITCHER ID
  3265.     AX = 4B04h
  3266.     BX = switcher ID
  3267.     ES:DI -> task switcher entry point (see #2466)
  3268. Return: AX = 0000h
  3269.     BX = status
  3270.         0000h successful
  3271.         other error (invalid ID or ID not allocated)
  3272. Notes:    called by a task switcher when it exits, unless it was the first loaded
  3273.       and is providing the support for AX=4B03h and AX=4B04h
  3274.     the task switcher providing the identifiers may call the terminating
  3275.       task switcher's entry point as needed
  3276.     this call is available from within DOSSHELL even if the task switcher
  3277.       is not installed
  3278.     this call is supported by PC Tools v8+ CPTASK, but appears to return
  3279.       sucessfully no matter which ID is given
  3280. SeeAlso: AX=4B02h,AX=4B03h
  3281. --------T-2F4B05-----------------------------
  3282. INT 2F C - DOS 5+ TASK SWITCHER - IDENTIFY INSTANCE DATA
  3283.     AX = 4B05h
  3284.     ES:BX = 0000h:0000h
  3285.     CX:DX -> task switcher entry point (see #2466)
  3286. Return: ES:BX -> startup info structure (see #2469) or 0000h:0000h
  3287. Notes:    called by task switcher
  3288.     clients with instance data should hook this call, pass it through to
  3289.       the previous handler with unchanged registers using a simulated
  3290.       interrupt.  On return, the client should create a startup info
  3291.       structure (see #2469), store the returned ES:BX in the "next"
  3292.       field, and return the address of the created structure in ES:BX
  3293.     all MS-DOS function calls are available from within this call
  3294. SeeAlso: AX=1605h,AX=160Bh,AX=4B02h
  3295.  
  3296. Format of task switcher startup info structure:
  3297. Offset    Size    Description    (Table 2469)
  3298.  00h  2 BYTEs    major, minor version of info structure (03h,00h)
  3299.  02h    DWORD    pointer to next startup info structure or 0000h:0000h
  3300.  06h    DWORD    0000h:0000h (ignored)
  3301.  0Ah    DWORD    ignored
  3302.  0Eh    DWORD    pointer to instance data records (see #2470)
  3303.  
  3304. Format of one instance data record in array:
  3305. Offset    Size    Description    (Table 2470)
  3306.  00h    DWORD    address of instance data (end of array if 0000h:0000h)
  3307.  04h    WORD    size of instance data
  3308. --------W-2F4B06-----------------------------
  3309. INT 2F - MS Windows - WIN.COM - GET ??? POINTER TO WIN.COM
  3310.     AX = 4B06h
  3311. Return: AX = 0000h
  3312.     ES:BX -> ??? function in WIN.COM
  3313. Note:    the entry point is called with
  3314.         AX = 0001h or 0003h
  3315.         BX = ???
  3316. SeeAlso: AX=4B80h
  3317. --------W-2F4B20-----------------------------
  3318. INT 2F - MS Windows 3+ - WIN.COM - SET PROGRAM TO EXECUTE ON EXIT
  3319.     AX = 4B20h
  3320. Return: AX = 0000h if successful
  3321.         DX:CX -> 256-byte buffer for pathname and commandline (see #2471)
  3322. Notes:    when the Windows function ExitWindows is called with an exit code of
  3323.       44h, WIN.COM executes the program specified in the returned buffer
  3324.       and then restarts Windows
  3325.     the returned address is a real-mode segment:offset value
  3326. SeeAlso: AX=4B21h
  3327.  
  3328. Format of WIN.COM buffer:
  3329. Offset    Size    Description    (Table 2471)
  3330.  00h 128 BYTEs    commandline for program (count byte, command tail, 0Dh)
  3331.  80h 128 BYTEs    ASCIZ pathname of program to execute
  3332. Note:    the order above is for a Windows95 DOS box; it may be reversed under
  3333.       Windows 3.x
  3334. --------W-2F4B21-----------------------------
  3335. INT 2F - Windows95 - WIN.COM - GET NESTING LEVEL
  3336.     AX = 4B21h
  3337. Return: AH = 00h if WIN.COM already active
  3338.         AL = number of instances of WIN.COM in memory
  3339. SeeAlso: AX=4B20h
  3340. --------K-2F4B52-----------------------------
  3341. INT 2F - KeyRus v7.3 - API
  3342.     AX = 4B52h ('KR')
  3343.     BL = function number
  3344.         00h installation check
  3345.         Return: AL = 82h if installed
  3346.                 BH = major version number
  3347.                 BL = minor version number
  3348.                 ES destroyed
  3349.         01h get driver status
  3350.         Return: AL??? = current status (see #2472)
  3351.         02h set driver state
  3352.         AL = new driver state (see #2472)
  3353.         03h blank screen (if blanking enabled when TSR was loaded)
  3354.         04h unblank screen
  3355.         4Ch switch to English keyboard mode
  3356.         90h switch to Russian keyboard mode
  3357. Return:
  3358.  
  3359. Bitfields for KeyRus driver status:
  3360. Bit(s)    Description    (Table 2472)
  3361.  1-0    language mode
  3362.     00 Latin
  3363.     01 Russian
  3364.     10 Alternative
  3365.     11 unused
  3366.  2    allow character loading (if disabled, use ROM fonts)
  3367.  3    English keyboard support
  3368.  7-4    used internally (read-only)
  3369. --------W-2F4B80-----------------------------
  3370. INT 2F - MS Windows - WSWAP.EXE - RESET INTERNAL VARIABLES
  3371.     AX = 4B80h
  3372. Return: nothing
  3373. Note:    called by WINOLDAP.MOD
  3374. SeeAlso: AX=4B06h
  3375. --------p-2F4C-------------------------------
  3376. INT 2F U - Advanced Power Management
  3377.     AH = 4Ch
  3378.     AL = function
  3379.         00h version check
  3380.         01h suspend system requested
  3381.         FFh suspend/resume battery notification
  3382.     ???
  3383. Return: ???
  3384. ----------2F4D-------------------------------
  3385. INT 2F U - ???
  3386.     AH = 4Dh
  3387.     ???
  3388. Return: ???
  3389. Note:    reportedly called by Kana Kanji Converter and MSKK
  3390. --------N-2F4E53BL00-------------------------
  3391. INT 2F - SilverNET v2+ - INSTALLATION CHECK
  3392.     AX = 4E53h ("NS")
  3393.     BL = 00h (function "installation check")
  3394.     BH = module ID (see #2473)
  3395. Return: AX = 0000h if specified module installed
  3396.     BX = 4E53h if installed
  3397. Program: SilverNET is an SMB-compatible peer-to-peer NOS for DOS or
  3398.       Windows systems, by Net-Source, Inc. of Santa Clara, CA.
  3399. SeeAlso: AX=4E53h/BL=01h,AX=4E53h/BL=02h,AX=B800h,AX=B809h
  3400.  
  3401. (Table 2473)
  3402. Values for SilverNET module ID:
  3403.  01h    SilverCACHE
  3404.  02h    Workstation
  3405.  03h    NetBIOS
  3406.  04h    Peer
  3407.  20h    NS Share
  3408.  80h    NetWare help TSR
  3409. --------N-2F4E53BL01-------------------------
  3410. INT 2F - SilverNET - GET RUNTIME PARAMETER
  3411.     AX = 4E53h ("NS")
  3412.     BL = 01h (function "get runtime parameter")
  3413.     BH = module ID (see #2473)
  3414.     CX = parameter index (see #2474,#2476,#2477)
  3415. Return: AX = WORD value at specified index (see #2475)
  3416. Desc:    retrieve a word of data from the specified SilverNET module
  3417.  
  3418. (Table 2474)
  3419. Values for SilverNET Peer parameter index (* = read-only):
  3420.  00h *    maximum outstanding SMB buffers
  3421.  02h *    maximum logged-in nodes
  3422.  04h *    number of shareable resources
  3423.  06h *    number of characters to print per time slice
  3424.  08h *    number of printers that can be shared
  3425.  0Ah *    number of nodes logged in
  3426.  0Ch *    number of files to allow opened
  3427.  0Eh    how fast to despool (/PSLICE)
  3428.  10h    audit flag
  3429.  24h *    far pointer to resource table (each resource is 96 bytes in length)
  3430.  32h *    far pointer to SFT (internal if SilverNET files > CONFIG.SYS files,
  3431.     else DOS SFT)
  3432.  36h    spool flags (see #2475)
  3433.  
  3434. Bitfields for spool flags:
  3435. Bit(s)    Description    (Table 2475)
  3436.  0    LPT1 needs despooling
  3437.  1    LPT2 needs despooling
  3438.  2    LPT2 needs despooling
  3439.  4    COM1 needs despooling
  3440.  5    COM2 needs despooling
  3441.  6    COM3 needs despooling
  3442.  
  3443. (Table 2476)
  3444. Values for NS Share parameter index (* = read-only):
  3445.  00h    version number (high byte = minor, low byte = major)
  3446.  10h *    segment of first lock record (other records in consecutive paragraphs)
  3447.     (if PSP field = 0000h, lock record is free)
  3448.  12h *    maximum possible number of lock records
  3449.  14h *    starting segment of sharing buffer
  3450.     (NS Share's sharing records are identical to DOS SHARE except that
  3451.       fields which are normally offsets into SHARE are segment numbers)
  3452.  18h *    size of sharing buffer in paragraphs
  3453.  1Ah *    total free paragraphs in sharing buffer
  3454.  1Ch *    current number of shared files
  3455.  1Eh *    current number of locked records
  3456.  
  3457. (Table 2477)
  3458. Values for Workstation parameter index (* = read-only):
  3459.  00h    version number (high byte = minor, low byte = major)
  3460.  02h *    size of each network buffer for file operations
  3461.  04h *    number of redirector file buffers
  3462.  06h *    size of each print cache buffer
  3463.  08h *    number of network LPT printers
  3464.  0Ch    flush time in ticks (idle time on network printer before flushing)
  3465.  0Eh    (16 WORDs) last active time for each printer
  3466.  2Eh *    stub segment if program split into two parts
  3467.  60h    receive name number for datagram listens
  3468.  62h *    18-byte machine name
  3469.  74h *    LASTDRIVE (01h = A:, etc.)
  3470.  7Ch    row number of message box on screen
  3471.  7Eh    message time in clock ticks
  3472.  82h *    number of network adapters in use
  3473.  84h    station ID broadcast flag (never set on redirectors)
  3474.  96h *    NetBIOS names left
  3475.  98h *    NCBs left
  3476.  9Ah *    sessions left
  3477.  A2h *    total number of network printers (LPT+COM)
  3478.  A4h *    number of serial network printers
  3479.  A8h *    segment containing file cache buffers
  3480.  AAh *    segment containing print cache buffers
  3481.  ACh *    bytes remaining free in HMA before program loaded
  3482.  AEh *    start of free memory in HMA
  3483.  B2h *    flag: using HMA
  3484. --------N-2F4E53BL02-------------------------
  3485. INT 2F - SilverNET - SET RUNTIME PARAMETERS
  3486.     AX = 4E53h ("NS")
  3487.     BL = 02h (function "set runtime parameters")
  3488.     BH = module ID (see #2473)
  3489.     CX = parameter index (see #2476,#2477)
  3490.     DX = new value for specified parameter
  3491. Desc:    set a WORD value in the specified SilverNET module
  3492. Note:    not all indexed parameters are writable; modifying a read-only
  3493.       parameter can result in system crashes
  3494. SeeAlso: AX=4E53h/BL=00h,AX=4E53h/BL=01h
  3495. --------N-2F5100-----------------------------
  3496. INT 2F U - ODIHLP.EXE - INSTALLATION CHECK
  3497.     AX = 5100h
  3498. Return: AL = FFh if installed
  3499.         BX = 0000h
  3500.         DX:SI -> signature string "ODI$HLP$"
  3501. Program: ODIHLP is a real-mode helper allowing the Windows for Workgroups 3.11
  3502.       protected-mode NDIS3 protocol to work with real-mode ODI drivers
  3503.       and LSL.COM
  3504. Note:    the returned signature string might be the first field of a structure
  3505. SeeAlso: AX=C000h"LSL.COM"
  3506. --------k-2F5200-----------------------------
  3507. INT 2F - JAM.SYS v1.10+ - "GetVersion" - INSTALLATION CHECK
  3508.     AX = 5200h
  3509. Return: AH = 80h (successful) if installed
  3510.     BX = internal JAM.SYS version number
  3511.     CX = size of JAMINFO structure (see #2478,#2479)
  3512.     DX = JAM.SYS segment address
  3513. Program: JAM.SYS is a main component of the JAM Real-Time Data Compression
  3514.       Utilities by George A. Reznik and friends (JAM Software).
  3515. SeeAlso: AX=5201h
  3516.  
  3517. Format of JAMINFO v1.10 structure:
  3518. Offset    Size    Description    (Table 2478)
  3519.  00h 25 BYTEs    extended BIOS parameter block (BPB)
  3520.  19h 11 BYTEs    ???
  3521.  25h    DWORD    total number of sectors in JAM archive file
  3522.         (size of compressed data area)
  3523.  29h    BYTE    flags (see #2480)
  3524.  2Ah 127 BYTEs    full JAM archive file name
  3525.  A9h    WORD    the number of fragments in archive file
  3526.  ABh 96 BYTEs    archive file fragmentation list -
  3527.         array of 16 FRAGMENT structures (see #2481)
  3528. 10Bh    DWORD    address of the host-drive DPB (Drive Parameter Block)
  3529. 10Fh    DWORD    number of free sectors in JAM archive file
  3530. 113h    WORD    device status word (see #2482)
  3531. SeeAlso: #2479
  3532.  
  3533. Format of JAMINFO v1.20 structure:
  3534. Offset    Size    Description    (Table 2479)
  3535.  00h 25 BYTEs    extended BIOS parameter block (BPB)
  3536.  19h    BYTE    physical driver number
  3537.  1Ah    BYTE    reserved
  3538.  1Bh    BYTE    extended boot record signature
  3539.  1Ch    DWORD    volume serial number
  3540.  20h 11 BYTEs    volume label
  3541.  2Bh  8 BYTEs    file system ID
  3542.  33h    DWORD    total number of sectors in JAM archive file
  3543.         (size of compressed data area)
  3544.  37h    BYTE    flags (see #2480)
  3545.  38h 128 BYTEs    full JAM archive file name
  3546.  B8h    WORD    the number of fragments in archive file
  3547.  BAh 96 BYTEs    archive file fragmentation list -
  3548.         array of 16 FRAGMENT structures (see #2481)
  3549. 11Ah    DWORD    address of the host-drive DPB (Drive Parameter Block)
  3550. 11Eh    DWORD    number of free sectors in JAM archive file
  3551. 122h    WORD    device status word (see #2482)
  3552. Note:    the first 33h bytes are copied from the archive file's boot sector
  3553. SeeAlso: #2478
  3554.  
  3555. Bitfields for JAMINFO flags:
  3556. Bit(s)    Description    (Table 2480)
  3557.  2-0    reserved
  3558.  3    (v1.20+)
  3559.  4    enable direct write requests (Int 26h, non-DOS requests, etc.)
  3560.  5    read-only mode
  3561.  6    no write-behind caching
  3562.  7    full undelete-compatible allocation strategy
  3563. SeeAlso: #2478,#2479
  3564.  
  3565. Format of JAM FRAGMENT structure:
  3566. Offset    Size    Description    (Table 2481)
  3567.  00h    WORD    starting sector (low word)
  3568.  02h    BYTE    starting sector (high byte)
  3569.  03h    WORD    size of fragment (low word)
  3570.  05h    BYTE    size of fragment (high byte)
  3571. SeeAlso: #2478,#2479
  3572.  
  3573. (Table 2482)
  3574. Values for JAM.SYS status (high byte):
  3575.  00h    successful
  3576.  01h    drive is not a JAM drive
  3577.  02h    drive is already attached
  3578.  03h    archive file cluster size value is larger than driver's one
  3579.  04h    drive is not attached
  3580.  05h    drive is locked
  3581.  06h    drive is not locked
  3582.  07h    bad physical-level request
  3583.  08h    host drive reading/writing error
  3584.  09h    bad entries in JAM descriptor table
  3585.  0Ah    compressed data integrity error
  3586.  0Bh    archive file overflow
  3587.  0Ch    bad DOS request
  3588.  0Dh    incorrect parameters in JAMINFO structure
  3589. Note:    the low byte of the status is the DOS error code for the Host drive
  3590. SeeAlso: #2252 at INT 2F/AX=0802h
  3591. --------k-2F5201-----------------------------
  3592. INT 2F - JAM.SYS v1.10+ - "GetInfo" - GET COMPRESSED DRIVE INFORMATION
  3593.     AX = 5201h
  3594.     DL = compressed drive number (0-default, 1-A:, etc.)
  3595.     DS:BX -> buffer for JAMINFO structure (see #2478,#2479)
  3596. Return: AH = status (00h,01h) (see #2482)
  3597. SeeAlso: AX=5200h
  3598. --------k-2F5202-----------------------------
  3599. INT 2F - JAM.SYS v1.10+ - "Attach" - MOUNT COMPRESSED DRIVE
  3600.     AX = 5202h
  3601.     DL = drive number (0-default, 1-A:, etc.) to attach to the JAM
  3602.           archive file
  3603.     DS:BX -> pointer to JAMINFO structure (see #2478,#2479), which
  3604.           contains parameters of the JAM file to mount, and pointer
  3605.           to the host drive DPB (i.e. DPB of the drive on which the
  3606.           JAM file is located)
  3607. Return: AH = status (00h,02h,03h,08h,09h,0Dh) (see also #2482)
  3608.         03h archive file cluster size value is larger than driver's - not
  3609.           mounted
  3610.         09h bad entries in JAM descriptor table - file mounted read-only
  3611.     AL = host drive error code (see #2252 at INT 2F/AX=0802h)
  3612. SeeAlso: AX=5203h
  3613. --------k-2F5203-----------------------------
  3614. INT 2F - JAM.SYS v1.10+ - "Detach" - UNMOUNT COMPRESSED DRIVE
  3615.     AX = 5203h
  3616.     DL = drive number (0-default, 1-A:, etc.) to detach
  3617. Return: AH = status (00h,01h,04h,05h,08h,09h,0Bh,0Dh) (see #2482)
  3618.     AL = host drive error code (see #2252 at INT 2F/AX=0802h)
  3619. SeeAlso: AX=5202h
  3620. --------k-2F5204-----------------------------
  3621. INT 2F - JAM.SYS v1.10+ - "Lock" - LOCK COMPRESSED DRIVE
  3622.     AX = 5204h
  3623.     DL = drive number (0-default, 1-A:, etc.) to lock
  3624. Return: AH = status (00h,01h,04h,05h,08h,09h,0Bh,0Dh) (see #2482)
  3625.     AL = host drive error code (see #2252 at INT 2F/AX=0802h)
  3626. SeeAlso: AX=5205h, AX=5206h, AX=5207h
  3627. --------k-2F5205-----------------------------
  3628. INT 2F - JAM.SYS v1.10+ - "UnLock" - UNLOCK COMPRESSED DRIVE
  3629.     AX = 5205h
  3630.     DL = drive number (0-default, 1-A:, etc.) to unlock
  3631. Return: AH = status (00h,01h,04h,06h,08h,09h,0Dh) (see #2482)
  3632.     AL = host drive error code (see #2252 at INT 2F/AX=0802h)
  3633. SeeAlso: AX=5204h, AX=5206h, AX=5207h
  3634. Note:    Lock and UnLock functions were added to the JAM API to prevent
  3635.       asynchronous physical-level access (see AX=5206h,AX=5207h) to
  3636.       compressed data on JAM drives. In other words, two or more programs
  3637.       which use JAM API (say, JMAX optimizer and JCHKDSK - disk checker)
  3638.       cannot be run on the same JAM drive simultaneously.
  3639. --------k-2F5206-----------------------------
  3640. INT 2F - JAM.SYS v1.10+ - "Read" - PHYSICAL READ DATA FROM JAM ARCHIVE
  3641.     AX = 5206h
  3642.     DL = drive number (0-default, 1-A:, etc.)
  3643.     DS:BX -> disk transfer packet (see #2483)
  3644. Return: AH = status (00h,01h,04h,06h,07h,08h,0Dh) (see #2482)
  3645.     AL = host drive error code (see #2252 at INT 2F/AX=0802h)
  3646. Program: JAM.SYS is a main component of the JAM Real-Time Data Compression
  3647.       Utilities by George A. Reznik and friends (JAM Software).
  3648. SeeAlso: AX=5207h
  3649.  
  3650. Format of disk transfer packet:
  3651. Offset    Size    Description    (Table 2483)
  3652.  00h    DWORD    sector number
  3653.  04h    WORD    number of sectors to read(write)
  3654.  06h    DWORD    transfer address
  3655. --------k-2F5207-----------------------------
  3656. INT 2F - JAM.SYS v1.10+ - "Write" - PHYSICAL WRITE DATA TO JAM ARCHIVE
  3657.     AX = 5207h
  3658.     DL = drive number (0-default, 1-A:, etc.)
  3659.     DS:BX -> disk transfer packet (see #2483)
  3660. Return: AH = status (00h,01h,04h,06h,07h,08h,0Dh) (see #2482)
  3661.     AL = host drive error code (see #2252 at INT 2F/AX=0802h)
  3662. SeeAlso: AX=5206h
  3663. --------p-2F53-------------------------------
  3664. INT 2F U - POWER.EXE - APM event broadcasting???
  3665.     AH = 53h
  3666.     AL = event???
  3667.         05h CPU idle
  3668.         0Bh PM event broadcast API
  3669. Return: ???
  3670. Note:    called by MS Windows 3.1 POWER.DRV; hooked by MS Mouse driver v8.20+
  3671.       and PC-Cache v8.0
  3672. SeeAlso: AX=530Bh,AX=5400h,INT 33/AX=002Fh
  3673. --------p-2F530B-----------------------------
  3674. INT 2F U - ??? (MOUSEPWR.COM, others) - ???
  3675.     AX = 530Bh
  3676.     BX = subfunction
  3677.         0003h ???
  3678.         0004h ???
  3679.     ???
  3680. Return: ???
  3681. Note:    it appears that subfunction 0003h reads or restores the current mouse
  3682.       settings (the MS Mouse driver hooks AX=530Bh), and 0004h might be
  3683.       the converse
  3684. --------p-2F5400-----------------------------
  3685. INT 2F U - POWER.EXE - INSTALLATION CHECK
  3686.     AX = 5400h
  3687. Return: AX = POWER.EXE version (AH = major, AL = minor) if installed
  3688.     BX = 504Dh ("PM")
  3689.     CF clear
  3690. Note:    called by MS Windows 3.1 POWER.DRV
  3691. SeeAlso: AH=53h,AX=5401h,AX=5402h,AX=5481h,AX=5482h
  3692. --------p-2F5401-----------------------------
  3693. INT 2F U - POWER.EXE - GET/SET POWER STATUS
  3694.     AX = 5401h
  3695.     BH = function
  3696.         00h get status
  3697.         Return: BL = current power management status (see #2484)
  3698.         01h set status
  3699.         BL = new power managment status (see #2484)
  3700. Return: AX = function status (see #2485)
  3701. Note:    called by MS Windows 3.1 POWER.DRV
  3702. SeeAlso: AH=53h,AX=5400h,AX=5402h,AX=5403h
  3703.  
  3704. Bitfields for power management status:
  3705. Bit(s)    Description    (Table 2484)
  3706.  0    POWER.EXE power management enabled
  3707.  1    APM firmware power management enabled
  3708.  2-7    reserved (0)
  3709. Notes:    bit 1 is ignored if there is no APM firmware
  3710.     bits 1-0: 00 = POWER OFF, 10 = POWER STD, 11 = POWER ADV
  3711.  
  3712. (Table 2485)
  3713. Values for POWER.EXE function status:
  3714.  0000h    successful
  3715.  0002h    "ERROR_PM_ALREADY_CONNECTED"
  3716.  0003h    "ERROR_PM_NOT_CONNECTED"
  3717.  0087h    "ERROR_PM_INVALID_PARAMETER"
  3718. --------p-2F5402-----------------------------
  3719. INT 2F U - POWER.EXE - GET/SET IDLE DETECTION STRATEGY
  3720.     AX = 5402h
  3721.     BH = subfunction
  3722.         00h get
  3723.         other set
  3724.         BL = detection strategy (00h-0Fh or FFh)
  3725. Return: BX = current/new detection strategy
  3726. SeeAlso: AH=53h,AX=5400h,AX=5401h,AX=5481h,AX=5482h
  3727. --------p-2F5403-----------------------------
  3728. INT 2F U - POWER.EXE - GET/SET ADVANCED POWER MANAGEMENT SETTING
  3729.     AX = 5403h
  3730.     BX = new power management setting or 0000h to get current setting
  3731. Return: AX = status
  3732.         0000h successful
  3733.         BX = power management setting (see #2486)
  3734.         other error code
  3735. SeeAlso: AX=5401h,AX=5480h
  3736.  
  3737. (Table 2486)
  3738. Values for power management setting:
  3739.  0001h-0005h "min"
  3740.  0006h         "reg"
  3741.  0007h-0008h "max"
  3742. --------t-2F5453-----------------------------
  3743. INT 2F - TesSeRact RAM-RESIDENT PROGRAM INTERFACE
  3744.     AX = 5453h
  3745.     BX = subfunction
  3746.         00h installation check
  3747.         CX = 0000h
  3748.         DS:SI -> 8-char blank-padded name (see #2487)
  3749.         Return: AX = FFFFh installed
  3750.                 CX = ID number of already-installed copy
  3751.             AX = anything else, not installed
  3752.                 CX = ID number for TSR when installed
  3753.         01h get user parameters
  3754.         CX = TSR ID number
  3755.         Return: AX = status
  3756.                 0000h successful
  3757.                 ES:BX -> user parameter block (see #2488)
  3758.                 nonzero failed
  3759.         02h check if hotkey in use
  3760.         CL = scan code of hot key (see #0005)
  3761.         Return: AX = FFFFh hot key conflicts with another TSR
  3762.                  otherwise safe to use the hotkey
  3763.         03h replace default critical error handler
  3764.         CX = TSR ID number
  3765.         DS:SI -> new routine for INT 24h
  3766.         Return: AX = nonzero, unable to install new handler
  3767.         04h get internal data area
  3768.         CX = TSR ID number
  3769.         Return: AX = status
  3770.                 0000h successful
  3771.                 ES:BX -> TSR's internal data area (see #2489)
  3772.                 nonzero, TSR not found
  3773.         05h set multiple hot keys
  3774.         CX = TSR ID number
  3775.         DL = number of additional hot keys to allocate
  3776.         DS:SI -> table of hot keys
  3777.             BYTE  hotkey scan code (see #0005)
  3778.             BYTE  hotkey shift state
  3779.             BYTE  flag value to pass to TSR (nonzero)
  3780.         Return: AX = nonzero, unable to install hot keys
  3781.         06h - 0Fh reserved
  3782.         10h enable TSR
  3783.         CX = TSR ID number
  3784.         Return: AX = nonzero, unable to enable
  3785.         11h disable TSR
  3786.         CX = TSR ID number
  3787.         Return: AX = nonzero, unable to disable
  3788.         12h unload TSR
  3789.         CX = TSR ID number
  3790.         Return: AX = nonzero, invalid TSR number
  3791.         Note: if any interrupts used by TSR have been grabbed by
  3792.             another TSR, the TesSeRact routines will wait until
  3793.             it is safe to remove the indicated TSR from memory
  3794.         13h restart TSR
  3795.         CX = TSR ID number of TSR which was unloaded but is still in
  3796.              memory
  3797.         Return: AX = nonzero, unable to restart TSR
  3798.         14h get status word
  3799.         CX = TSR ID number
  3800.         Return: AX = FFFFh invalid ID number
  3801.                = other, successful
  3802.                 BX = bit flags
  3803.         15h set status word
  3804.         CX = TSR ID number
  3805.         DX = new bit flags
  3806.         Return: AX = nonzero, unable to set status word
  3807.         16h get INDOS state at popup
  3808.         CX = TSR ID number
  3809.         Return: AX = 0000h successful
  3810.                 BX = value of INDOS flag
  3811.         17h - 1Fh reserved
  3812.         20h call user procedure
  3813.         CX = TSR ID number
  3814.         ES:DI -> user-defined data
  3815.         Return: AX = 0000h successful
  3816.         21h stuff keystrokes into keyboard buffer
  3817.         CX = TSR ID number
  3818.         DL = speed
  3819.             00h stuff keystrokes only when buffer is empty
  3820.             01h stuff up to four keystrokes per clock tick
  3821.             02h stuff up to 15 keystrokes per clock tick
  3822.         DH = scan code flag
  3823.             if zero, buffer contains alternating ASCII and scan codes
  3824.             if nonzero, buffer contains only ASCII codes
  3825.         SI = number of keystrokes
  3826.         ES:DI -> buffer to stuff
  3827.         Return: AX = 0000h success
  3828.                  F0F0h user aborted with ^C or ^Break
  3829.                  other unable to stuff keystrokes
  3830.         22h (v1.10) trigger popup
  3831.         CX = TSR ID number
  3832.         Return: AX = 0000h success, TSR will either pop up or beep to
  3833.                    indicate that it is unable to pop up
  3834.                  nonzero invalid ID number
  3835.         23h (v1.10) invoke TSR's background function
  3836.         CX = TSR ID number
  3837.         Return: AX = 0000h success
  3838.                  FFFFh not safe to call background function
  3839.                  nonzero invalid ID number
  3840.         24h - 2Fh reserved
  3841. Notes:    Borland's THELP.COM popup help system for Turbo Pascal and Turbo C
  3842.       (versions 1.x and 2.x only) fully supports the TesSeRact API, as
  3843.       do the SWAP?? programs by Innovative Data Concepts.
  3844.     AVATAR.SYS supports functions 00h and 01h (only the first three fields
  3845.       of the user parameter block) using the name "AVATAR  "
  3846. SeeAlso: AX=CAFEh,INT 16/AX=55FFh,INT 2D"AMIS"
  3847. Index:    installation check;TesSeRact TSR interface|uninstall;TesSeRact
  3848.  
  3849. (Table 2487)
  3850. Values for TesSeRact names:
  3851.  "AVATAR  "    AVATAR.SYS
  3852.  "QeditTSR"    TSR version of SemWare's Qedit editor
  3853.  "SCRNBLNK"    Trusted Access screen blanker
  3854.  
  3855. Format of TesSeRact User Parameter Block:
  3856. Offset    Size    Description    (Table 2488)
  3857.  00h  8 BYTEs    blank-padded TSR name
  3858.  08h    WORD    TSR ID number
  3859.  0Ah    DWORD    bitmap of supported functions
  3860.  0Eh    BYTE    scan code of primary hotkey (see #0005)
  3861.         00h = pop up when shift states match
  3862.         FFh = no popup (if shift state also FFh)
  3863.  0Fh    BYTE    shift state of primary hotkey
  3864.         FFh = no popup (if scan code also FFh)
  3865.  10h    BYTE    number of secondary hotkeys
  3866.  11h    DWORD    pointer to extra hotkeys set by func 05h
  3867.  15h    WORD    current TSR status flags
  3868.  17h    WORD    PSP segment of TSR
  3869.  19h    DWORD    DTA for TSR
  3870.  1Dh    WORD    default DS for TSR
  3871.  1Fh    DWORD    stack at popup
  3872.  23h    DWORD    stack at background invocation
  3873. Index:    hotkeys;TesSeRact TSR interface
  3874.  
  3875. Format of TSR internal data area:
  3876. Offset    Size    Description    (Table 2489)
  3877.  00h    BYTE    revision level of TesSeRact library
  3878.  01h    BYTE    type of popup in effect
  3879.  02h    BYTE    INT 08 occurred since last invocation
  3880.  03h    BYTE    INT 13 occurred since last invocation
  3881.  04h    BYTE    active interrupts
  3882.  05h    BYTE    active soft interrupts
  3883.  06h    BYTE    DOS major version
  3884.  07h    BYTE    how long to wait before popping up
  3885.  08h    DWORD    pointer to INDOS flag
  3886.  0CH    DWORD    pointer to DOS critical error flag
  3887.  10h    WORD    PSP segment of interrupted program
  3888.  12h    WORD    PSP segment of prog interrupted by INT 28
  3889.  14h    DWORD    DTA of interrupted program
  3890.  18h    DWORD    DTA of program interrupted by INT 28
  3891.  1Ch    WORD    SS of interrupted program
  3892.  1Eh    WORD    SP of interrupted program
  3893.  20h    WORD    SS of program interrupted by INT 28
  3894.  22h    WORD    SP of program interrupted by INT 28
  3895.  24h    DWORD    INT 24 of interrupted program
  3896.  28h  3 WORDs    DOS 3.0+ extended error info
  3897.  2Eh    BYTE    old BREAK setting
  3898.  2Fh    BYTE    old VERIFY setting
  3899.  30h    BYTE    were running MS WORD 4.0 before popup
  3900.  31h    BYTE    MS WORD 4.0 special popup flag
  3901.  32h    BYTE    enhanced keyboard call in use
  3902.  33h    BYTE    delay for MS WORD 4.0
  3903. 11 times (for INTs 08h,09h,13h,16h,1Ch,21h,28h,2Fh,1Bh,23h, and 24h):
  3904.     DWORD    old interrupt vector
  3905.     BYTE    interrupt number
  3906.     WORD    offset in TesSeRact code segment of new interrupt handler
  3907. --------p-2F5480-----------------------------
  3908. INT 2F U - POWER.EXE - GET/SET ???
  3909.     AX = 5480h
  3910.     BX = direction
  3911.         0000h get
  3912.         other set
  3913.     CX = size of buffer (at least 0010h)
  3914.     DS:SI -> buffer
  3915. Return: AX = status
  3916.         0000h successful
  3917.         other error code
  3918. SeeAlso: AX=5400h,AX=5481h,AX=548Fh
  3919. --------p-2F5481-----------------------------
  3920. INT 2F U - POWER.EXE - GET STATISTICS
  3921.     AX = 5481h
  3922.     BX = which statistics
  3923.         0000h idle detection
  3924.         0001h APM statistics
  3925.     CX = length of buffer in bytes
  3926.     DS:SI -> buffer for statistics (see #2490,#2491)
  3927. Return: AX = status
  3928.         0000h successful
  3929.         0071h "ERROR_PM_BUFFER_TOO_SMALL"
  3930.         0087h "ERROR_PM_INVALID_PARAMETER"
  3931. SeeAlso: AH=53h,AX=5400h,AX=5480h,AX=5402h,AX=5482h
  3932.  
  3933. Format of POWER.EXE idle detection statistics:
  3934. Offset    Size    Description    (Table 2490)
  3935.  00h    DWORD    "CPU_ON_TIME" total time CPU is active with POWER.EXE idle
  3936.           detection enabled, in timer ticks
  3937.  04h    DWORD    "CPU_IDLE_TIME" timer ticks during which CPU was idle
  3938.         (divide by previous to get idle    rate)
  3939.  08h    DWORD    total idle calls
  3940.  0Ch    DWORD    "TOTAL_APP_IDLE" total INT 2Fh idle calls
  3941.  10h    DWORD    "TOTAL_DOS_YIELD" total INT 28h idle calls
  3942.  14h    DWORD    "TOTAL_KEY_IDLE" total INT 16h idle calls
  3943.  18h    DWORD    "TOTAL_DOS_IDLE" total INT 2Ah idle calls
  3944.  
  3945. Format of APM statistics:
  3946. Offset    Size    Description    (Table 2491)
  3947.  00h    DWORD    "RESUME_COUNT" total number of resumes since last APM_ENABLE
  3948. --------p-2F5482-----------------------------
  3949. INT 2F U - POWER.EXE - GET/SET APM POLLING FREQUENCY
  3950.     AX = 5482h
  3951.     BX = new polling frequency or 0000h to get current frequency
  3952. Return: AX = 0000h (successful)
  3953.     BX = current frequency if BX=0000h on entry
  3954. SeeAlso: AH=53h,AX=5400h,AX=5401h,AX=5480h,AX=5481h,AX=548Fh
  3955. --------p-2F548F-----------------------------
  3956. INT 2F U - POWER.EXE - GET/SET ???
  3957.     AX = 548Fh
  3958.     BX = ??? or 0000h to get current ???
  3959. Return: AX = 0000h (successful)
  3960.     BX = current ???
  3961.     CX = ???
  3962. SeeAlso: AX=5400h,AX=5480h,AX=5482h
  3963. --------l-2F5500-----------------------------
  3964. INT 2F U - DOS 5+ - COMMAND.COM INTERFACE
  3965.     AX = 5500h
  3966. Return: AX = 0000h if an instance of COMMAND.COM is already running
  3967.     DS:SI -> entry point table
  3968. Notes:    used to access the shareable portion of COMMAND.COM, which may have
  3969.       been moved into the HMA; only the primary COMMAND.COM retains this
  3970.       portion
  3971.     procedures called from a dispatcher in COMMAND's resident portion;
  3972.       most assume that the segment address of the resident portion is on
  3973.       the stack and are thus not of general use
  3974. SeeAlso: AX=5501h
  3975. --------l-2F5501-----------------------------
  3976. INT 2F U - DOS 5+ - ROM COMMAND.COM INTERFACE
  3977.     AX = 5501h
  3978. Return: ???
  3979. Note:    used to determine whether the caller is the first instance of ROM
  3980.       COMMAND.COM
  3981. SeeAlso: AX=5500h
  3982. --------R-2F5600-----------------------------
  3983. INT 2F - INTERLNK - INSTALLATION CHECK
  3984.     AX = 5600h
  3985.     DX = magic value FFFFh
  3986.     BL = instance number (00h = any, 01h = first loaded, etc.)
  3987. Return: AL = FFh if installed
  3988.         BL = instance number
  3989.         CX = version number (CL = major, CH = minor)
  3990.         DX = resident CS of driver, DX:0000h -> header (see #2492)
  3991. SeeAlso: AX=5601h,AX=5602h,INT 60/AX=0000h
  3992.  
  3993. Format of Interlnk device driver header:
  3994. Offset    Size    Description    (Table 2492)
  3995.  00h    DWORD    pointer to next driver, offset=FFFFh if last driver
  3996.  04h    WORD    device attributes (see #1299,#1300)
  3997.  06h    WORD    device strategy entry point
  3998.  08h    WORD    device interrupt entry point
  3999.  0Ah  8 BYTEs    character device name "NUL2    "
  4000.  12h 165 BYTEs    ???
  4001.  B7h 67 BYTEs    fully qualified Interlnk filename
  4002.  FAh  6 BYTEs    ???
  4003. 100h    DWORD    pointer back to Interlnk filename at offset B7h
  4004. 104h  8 BYTEs    ???
  4005. 10Ch    BYTE    total number of redirected drives
  4006. 10Dh    BYTE    first local drive number (0=A:)
  4007. 10Eh    BYTE    printer redirection (0=no, 1=yes)
  4008. 10Fh    BYTE    ???
  4009. 110h  3    BYTEs    LPT1...3 status (0FFh=invalid)
  4010. 113h 26 BYTEs    remote drive number (0=A:, 0FEh=unused) (refer to note below)
  4011. 12Dh 26 BYTEs    always 0FEh ???
  4012. 147h 26 BYTEs    always 0FFh ???
  4013. Note:    to obtain the remote drive number, subtract the value at offset 10Ch
  4014.       from the local drive number before indexing into the table at 113h
  4015.       (example: if local drives F, G, H are remote drives C, F, E then
  4016.       the first three bytes at offset 113h are 02h, 05h, 04h)
  4017.     for each instance of Interlnk, an extra device driver is loaded, but
  4018.       all have the same device name NUL2
  4019. SeeAlso: #1298 at INT 21/AH=52h
  4020. --------R-2F5601-----------------------------
  4021. INT 2F - INTERLNK - CHECK IF REDIRECTED DRIVE
  4022.     AX = 5601h
  4023.     DX = magic value FFFFh
  4024.     BH = drive number (0=A:)
  4025.     BL = instance number (00h=any, 01h=first loaded, etc.)
  4026. Return: (as for AL=00h if redirected drive)
  4027. SeeAlso: AX=5600h,AX=5601h
  4028. --------R-2F5602-----------------------------
  4029. INT 2F - INTERLNK - CHECK IF PORT IN USE
  4030.     AX = 5602h
  4031.     DX = magic value FFFFh
  4032.     BL = instance number (00h=any, 01h=first loaded, etc.)
  4033.     CX = base port address of COM / LPT port to check
  4034. Return: (as for AL=00h if port in use for a redirected drive)
  4035. SeeAlso: AX=5600h
  4036. --------d-2F5700-----------------------------
  4037. INT 2F U - IOMEGA DRIVERS - INSTALLATION CHECK
  4038.     AX = 5700h
  4039.     BX = program ID??? (0201h used by GUEST.EXE)
  4040.     DX = 496Fh ('Io')
  4041. Return: AL = status
  4042.         00h not installed
  4043.         FFh installed
  4044. SeeAlso: AX=5701h,AX=5710h,AX=5711h,AX=5712h
  4045. --------d-2F5701-----------------------------
  4046. INT 2F U - IOMEGA DRIVERS - ???
  4047.     AX = 5701h
  4048.     BX = program ID??? (0201h used by GUEST.EXE)
  4049.     DX = 496Fh ('Io')
  4050. Return: AX = 0001h
  4051. SeeAlso: AX=5700h,AX=5710h,AX=5711h,AX=5712h
  4052. --------d-2F5710-----------------------------
  4053. INT 2F U - IOMEGA DRIVERS - GET DRIVER INFORMATION???
  4054.     AX = 5710h
  4055.     BX = program ID??? (0201h used by GUEST.EXE)
  4056.     DX = 496Fh ('Io')
  4057. Return: AX = ??? (BX ORed with ???)
  4058.     BX = ??? (internal variable)
  4059.     CX = ??? (internal variable)
  4060.     DX = ??? (CX ORed with ???)
  4061. SeeAlso: AX=5700h,AX=5701h,AX=5711h,AX=5712h
  4062. --------d-2F5711-----------------------------
  4063. INT 2F U - IOMEGA DRIVERS - LOCK MEDIA IN DRIVE
  4064.     AX = 5711h
  4065.     BX = program ID??? (0201h used by GUEST.EXE)
  4066.     DX = 496Fh ('Io')
  4067. Return: CF clear if successful (storage medium in drive)
  4068.         AX = new lock count
  4069.     CF set on error (drive empty)
  4070. SeeAlso: AX=5700h,AX=5701h,AX=5710h,AX=5712h
  4071. --------d-2F5712-----------------------------
  4072. INT 2F U - IOMEGA DRIVERS - UNLOCK MEDIA IN DRIVE / EJECT
  4073.     AX = 5712h
  4074.     BX = program ID??? (0201h used by GUEST.EXE)
  4075.     DX = 496Fh ('Io')
  4076. Return: AX = new lock count (00h = unlocked)
  4077. Note:    if the lock count was already zero, the storage medium is ejected
  4078.       from the drive
  4079. SeeAlso: AX=5700h,AX=5701h,AX=5710h,AX=5711h
  4080. --------c-2F5758BX4858-----------------------
  4081. INT 2F U - Helix Multimedia Cloaking - CACHECLK - INSTALLATION CHECK
  4082.     AX = 5758h
  4083.     BX = 4858h ('HX')
  4084.     DX = 4443h ('DC')
  4085.     CX <> 5758h
  4086. Return: BX = 6878h if installed
  4087.     DX = 6463h if installed
  4088.        CX = version (CH=major,CL=minor)
  4089. Program: CACHECLK is a 'Cloaked' disk cache by Helix Software
  4090. Note:    returns with registers unchanged if CX=5758h on entry
  4091. SeeAlso: INT 16/AX=5758h/BX=4858h,INT 2F/AX=4310h"Cloaking"
  4092. --------X-2F5D00-----------------------------
  4093. INT 2F U - PCMCIA - AWARD PCDISK - GET INFO FROM DRIVER ???
  4094.     AX = 5D00h
  4095. Return: ES:BX -> ???
  4096. Note:    supported by Ventura Micro / Award PCDISK.EXE v1.02c PCMCIA/ATA driver
  4097. SeeAlso: AX=5D01h,INT 21/AX=440Dh"DOS 3.2+"
  4098. --------X-2F5D01-----------------------------
  4099. INT 2F U - PCMCIA - AWARD PCDISK - PUT INFO INTO DRIVER ???
  4100.     AX = 5D01h
  4101.     ES:BX -> ???
  4102. Return: nothing
  4103. Note:    supported by Ventura Micro / Award PCDISK.EXE v1.02c PCMCIA/ATA driver
  4104. SeeAlso: AX=5D00h,INT 21/AX=440Dh"DOS 3.2+"
  4105. --------s-2F60FFDL00-------------------------
  4106. INT 2F U - IPLAY v1.00b - INSTALLATION CHECK
  4107.     AX = 60FFh
  4108.     DL = 00h (function number)
  4109.     BX = 5344h ('SD')
  4110.     CX = 4D50h ('MP')
  4111. Return: AX = 4F4Bh ('OK') if installed
  4112. Program: IPLAY is the Inertia Player by Prime and Excalibur for .MODules
  4113.       (digitized music files)
  4114. Note:    in version 1.00b, any value for DL except 01h invokes this function
  4115. SeeAlso: AX=60FFh/DL=01h
  4116. --------s-2F60FFDL01-------------------------
  4117. INT 2F U - IPLAY v1.00b - GET DATA SEGMENT
  4118.     AX = 60FFh
  4119.     DL = 01h (function number)
  4120.     BX = 5344h ('SD')
  4121.     CX = 4D50h ('MP')
  4122. Return: AX = data segment
  4123. Program: IPLAY is the Inertia Player by Prime and Excalibur for .MODules
  4124.       (digitized music files)
  4125. SeeAlso: AX=60FFh/DL=00h
  4126. --------v-2F6282-----------------------------
  4127. INT 2F U - PC Tools v7.0+ VDEFEND, VSAFE, VWATCH, DATAMON - SET ??? ADDRESS
  4128.     AX = 6282h
  4129.     CX:DX -> ??? or 0000h:0000h
  4130.     DI = segment of ??? record (see #2493) or 0000h/FFFFh to ignore
  4131. Return: BX = 0062h
  4132. Note:    if CX:DX = 0000h:0000h on entry, the ??? address is not changed
  4133.       (DATAMON only)
  4134. SeeAlso: INT 13/AH=FAh"VSAFE",INT 21/AH=FAh"VDEFEND"
  4135.  
  4136. Format of VSAFE/VWATCH record:
  4137. Offset    Size    Description    (Table 2493)
  4138.  00h    DWORD    ???
  4139.  04h    WORD    offset of ??? in record's segment
  4140.         VSAFE 2.0 sets byte at +01h to 56h or 58h
  4141.         VWATCH 2.1 sets byte at +02h to 56h or 58h
  4142.  06h  2 BYTEs    ???
  4143.  08h    BYTE    ??? (01h/other)
  4144. --------v-2F6284BX0000-----------------------
  4145. INT 2F U - PC Tools v7-8 DATAMON, v9+ DPROTECT    - INSTALLATION CHECK
  4146.     AX = 6284h
  4147.     BX = 0000h
  4148.     CX = 0000h
  4149. Return: AX = segment of resident code
  4150.     BX = 5555h
  4151.     CX = 5555h
  4152. Note:    also supported by DOS 6 UNDELETE which is licensed from PC Tools
  4153. SeeAlso: AX=6284h/BX=0001h,INT 16/AX=FFA3h/BX=0000h
  4154. --------v-2F6284BX0001-----------------------
  4155. INT 2F U - PC Tools v7-8 DATAMON, v9+ DPROTECT - GET ???
  4156.     AX = 6284h
  4157.     BX = 0001h
  4158.     CX = 0001h
  4159. Return: AX:BX -> ??? data (see #2494)
  4160.     CX = BX
  4161. SeeAlso: AX=6284h/BX=0000h
  4162.  
  4163. Format of DPROTECT data for v9.0:
  4164. Offset    Size    Description    (Table 2494)
  4165.  00h  5 BYTEs    ???
  4166.  05h    WORD    resident code segment (may be segment of DWORD at +03h)
  4167.  07h    DWORD    -> FAR function to sound alert tone
  4168.     ???
  4169. --------v-2F6284BX0002-----------------------
  4170. INT 2F U - PC Tools v7-8 DATAMON, v9+ DPROTECT - GET OPTIONS
  4171.     AX = 6284h
  4172.     BX = 0002h
  4173.     CX = 0002h
  4174. Return: AX = options (see #2495)
  4175.     BX = ??? (0000h for v9)
  4176.     CX = AX
  4177.     DX = BX
  4178. Note:    also supported by DOS 6 UNDELETE which is licensed from PC Tools
  4179. SeeAlso: AX=6284h/BX=0000h,AX=6284h/BX=0003h
  4180.  
  4181. Bitfields for DATAMON/DPROTECT options:
  4182. Bit(s)    Description    (Table 2495)
  4183.  1    ???
  4184.  12    disabled
  4185.  13    using Delete Sentry
  4186.  14    using Delete Tracker
  4187. --------v-2F6284BX0003-----------------------
  4188. INT 2F U - PC Tools v7-8 DATAMON, v9+ DPROTECT - SET OPTION??? FLAGS
  4189.     AX = 6284h
  4190.     BX = 0003h
  4191.     CX = flags (see #2496)
  4192.     DX = flags
  4193.         bit 15: ???
  4194. Note:    v9 DPROTECT only checks bit 12 of CX, and ignores DX entirely
  4195. SeeAlso: AX=6284h/BX=0002h
  4196.  
  4197. Bitfields for DATAMON/DPROTECT CX flags:
  4198. Bit(s)    Description    (Table 2496)
  4199.  3    ???
  4200.  5    ???
  4201.  10    ???
  4202.  12    disable DATAMON/DPROTECT
  4203. --------v-2F6284BX0004-----------------------
  4204. INT 2F U - PC Tools v8 DATAMON, v9+ DPROTECT - ???
  4205.     AX = 6284h
  4206.     BX = 0004h
  4207.     CX = 0004h
  4208. Return: AX = 5555h
  4209.     BX = ??? (0800h)
  4210.     CX = ??? (FCCCh for v8, FCCBh for v9)
  4211. --------V-2F6400-----------------------------
  4212. INT 2F - SCRNSAV2.COM - INSTALLATION CHECK
  4213.     AX = 6400h
  4214. Return: AL = installation state
  4215.         00h not installed
  4216.         FFh installed
  4217. Program: SCRNSAV2.COM is a screen saver for PS/2s with VGA by Alan Ballard
  4218. SeeAlso: INT 10/AX=5555h,INT 14/AX=AA01h
  4219. Index:    screen saver;SCRNSAV2
  4220. --------N-2F7000-----------------------------
  4221. INT 2F - License Service API - INSTALLATION CHECK
  4222.     AX = 7000h
  4223.     CX = license server index (0000h to 001Fh)
  4224. Return: AL = status
  4225.         00h not installed
  4226.         FFh installed
  4227. Notes:    The License Service API is being maintained by Microsoft but is being
  4228.       supported by a large number of companies including Apple, Banyan,
  4229.       DEC, HP, Lotus, Microsoft, Novell, Software Publishers Association,
  4230.       and Wordperfect (not a complete list!)
  4231.     Each license service provider must search for the next free index
  4232.       slot to use
  4233. SeeAlso: AX=7001h,AX=7003h,AX=7004h,AX=7005h
  4234. --------N-2F7001-----------------------------
  4235. INT 2F - License Service API - REQUEST LICENSE
  4236.     AX = 7001h
  4237.     CX = license server index (0000h to 001Fh)
  4238.     DS:DX -> SLSREQUEST structure (see #2497)
  4239. Return: AX = status
  4240.         0000h success
  4241.         else  provider error code
  4242.     ES:BX = provider specific handle for the license context
  4243. SeeAlso: AX=7002h,AX=7004h,AX=7005h
  4244.  
  4245. Format of License Service SLSREQUEST structure:
  4246. Offset    Size    Description    (Table 2497)
  4247.  00h    DWORD    (ret) status code
  4248.  04h    DWORD    (ret) handle identifying context
  4249.  08h    DWORD    (call) address of Publisher string
  4250.  0Ch    DWORD    (call) address of Product string
  4251.  10h    DWORD    (call) address of Version string
  4252.  14h    DWORD    units required
  4253.  18h    DWORD    address of comment string
  4254.  1Ch    DWORD    address of SLSCHALLENGE structure (see #2498)
  4255.  
  4256. Format of License Service SLSCHALLENGE structure:
  4257. Offset    Size    Description    (Table 2498)
  4258.  00h    DWORD    algorithm (currently always 1)
  4259.  04h    DWORD    secret to be challenged (1-255)
  4260.  08h    DWORD    size of challenge in bytes (1-255)
  4261.  0Ch  N BYTEs    challenge data
  4262. --------N-2F7002-----------------------------
  4263. INT 2F - License Service API - RELEASE LICENSE
  4264.     AX = 7002h
  4265.     CX = license server index (0000h to 001Fh)
  4266.     DS:DX -> SLSRELEASE structure (see #2499)
  4267.     ES:BX = provider specific handle for the license context
  4268. Return: AL = status
  4269.         00h not installed
  4270.         FFh installed
  4271. SeeAlso: AX=7001h,AX=7005h
  4272.  
  4273. Format of License Service SLSRELEASE structure:
  4274. Offset    Size    Description    (Table 2499)
  4275.  00h    DWORD    handle indentifying license context
  4276.  04h    DWORD    total units consumed
  4277.  08h    DWORD    address of comment string
  4278. --------N-2F7003-----------------------------
  4279. INT 2F - License Service API - UPDATE
  4280.     AX = 7003h
  4281.     CX = license server index (0000h to 001Fh)
  4282.     DS:DX -> SLSUPDATE structure (see #2500)
  4283.     ES:BX = provider specific handle for the license context
  4284. Return: AL = status
  4285.         00h not installed
  4286.         FFh installed
  4287. SeeAlso: AX=7004h,AX=7005h
  4288.  
  4289. Format of License Service SLSUPDATE structure:
  4290. Offset    Size    Description    (Table 2500)
  4291.  00h    DWORD    (ret) status code
  4292.  04h    DWORD    (call) handle identifying license context
  4293.  08h    DWORD    (call) total units consumed
  4294.  0Ch    DWORD    additional units required
  4295.  10h    DWORD    address of comment string
  4296.  14h    DWORD    address of SLSCHALLENGE structure (see #2498)
  4297. --------N-2F7004-----------------------------
  4298. INT 2F - License Service API - GET ERROR
  4299.     AX = 7004h
  4300.     CX = license server index (0000h to 001Fh)
  4301.     DS:DX -> SLSGETERROR structure (see #2501)
  4302.     ES:BX = provider specific handle for the license context
  4303. Return: AL = status
  4304.         00h not installed
  4305.         FFh installed
  4306. SeeAlso: AX=7000h,AX=7001h
  4307.  
  4308. Format of License Service SLSGETERROR structure:
  4309. Offset    Size    Description    (Table 2501)
  4310.  00h    DWORD    (ret) status code
  4311.  04h    DWORD    handle identifying license context
  4312.  08h    DWORD    error code
  4313.  0Ch    DWORD    buffer size in bytes
  4314.  10h  N BYTEs    data buffer
  4315. --------N-2F7005-----------------------------
  4316. INT 2F - License Service API - QUERY LICENSE
  4317.     AX = 7005h
  4318.     CX = license server index (0000h to 001Fh)
  4319.     DS:DX -> SLSQUERY structure (see #2502)
  4320.     ES:BX = provider specific handle for the license context
  4321. Return: AL = status
  4322.         00h not installed
  4323.         FFh installed
  4324. SeeAlso: AX=7001h,AX=7002h
  4325.  
  4326. Format of License Service SLSQUERY structure:
  4327. Offset    Size    Description    (Table 2502)
  4328.  00h    DWORD    (ret) status code
  4329.  04h    DWORD    handle identifying license context
  4330.  08h    DWORD    information index
  4331.  0Ch    DWORD    buffer size in bytes
  4332.  10h  N BYTEs    data buffer
  4333. --------K-2F7041BX4B70-----------------------
  4334. INT 2F U - HP 200LX - KEY200 - INSTALLATION CHECK
  4335.     AX = 7041h
  4336.     BX = 4B70h
  4337. Return: BX = 7965h if keyboard remapper KEY200.COM installed
  4338. --------d-2F7200-----------------------------
  4339. INT 2F - SRDISK v1.30+ - INSTALLATION CHECK
  4340.     AX = 7200h
  4341. Return: AL = FFh if installed
  4342.         ES = segment of device driver header (see #2503)
  4343. Program: SRDISK is a freeware resizeable RAMdisk by Marko Kohtala
  4344. SeeAlso: AX=7201h
  4345.  
  4346. Format of SRDISK device driver header:
  4347. Offset    Size    Description    (Table 2503)
  4348.  00h 10 BYTEs    same as standard device driver header
  4349.           (see #1298 at INT 21/AH=52h)
  4350.  0Ah    BYTE    number of subunits (drives) supported by driver
  4351.  0Bh  3 BYTEs    signature "SRD"
  4352.  0Eh  4 BYTEs    memory type string ("XMS "/"EMS ")
  4353.  12h  4 BYTEs    ASCII driver version string "N.NN"
  4354.  16h    BYTE    00h
  4355.  17h    BYTE    configuration format version (currently 00h or 01h)
  4356.  18h    WORD    offset of drive configuration data
  4357. SeeAlso: #1298
  4358. --------d-2F7201-----------------------------
  4359. INT 2F - SRDISK v2.02 - GET CODE/DATA SEGMENT
  4360.     AX = 7201h
  4361. Return: AL = FFh if installed
  4362.         ES = segment of device driver header (see #2503)
  4363. Program: SRDISK is a freeware resizeable RAMdisk by Marko Kohtala
  4364. SeeAlso: AX=7200h
  4365. --------N-2F7A00-----------------------------
  4366. INT 2F - Novell NetWare - LOW-LEVEL API (IPX) INSTALLATION CHECK
  4367.     AX = 7A00h
  4368. Return: AL = status
  4369.         00h not installed
  4370.         FFh installed
  4371.         ES:DI -> FAR entry point for routines accessed exclusively
  4372.               through INT 7A in NetWare versions through 2.0a.
  4373.               Call with same values as INT 7A
  4374.         ES:BX -> two bytes containing IPX major/minor version
  4375.             (IPXODI v2.12; BX unchanged by older IPX drivers)
  4376. SeeAlso: AX=7AFFh/BX=0000h,AX=D800h,INT 64"Novell",INT 7A"LOW-LEVEL API"
  4377. --------N-2F7A10-----------------------------
  4378. INT 2F U - Novell NetWare - TBMI v1.1+ - GET TBMI STATUS
  4379.     AX = 7A10h
  4380. Return: DH = major TBMI version number
  4381.     DL = minor TBMI version number (01h for v1.1)
  4382.     CX = segment address of TBMI resident part
  4383.     BX = status word of TBMI (see #2504)
  4384. Note:    TBMI is the Task-Switched Buffer Manager Interface
  4385. SeeAlso: AX=7A11h,AX=7A12h,AX=7A13h,AX=7A14h
  4386.  
  4387. Bitfields for NetWare TBMI status word:
  4388. Bit(s)    Description    (Table 2504)
  4389.  0    INT2F intercepted by TBMI
  4390.  1    INT7A intercepted by TBMI
  4391.  2    INT64 intercepted by TBMI
  4392.  3-14    reserved or unused ???
  4393.  15    outstanding task ID was detected
  4394. --------N-2F7A11-----------------------------
  4395. INT 2F U - Novell NetWare - TBMI v1.1+ - GET INT2F HANDLERS
  4396.     AX = 7A11h
  4397. Return: ES:BX -> old INT 2F handler
  4398.     DS:DX -> TBMI INT 2F handler
  4399. SeeAlso: AX=7A10h,AX=7A12h,AX=7A13h,AX=7A1Ah
  4400. --------N-2F7A12-----------------------------
  4401. INT 2F U - Novell NetWare - TBMI v1.1+ - GET INT64 HANDLERS
  4402.     AX = 7A12h
  4403. Return: ES:BX -> old INT 64 handler
  4404.     DS:DX -> TBMI INT 64 handler
  4405. SeeAlso: AX=7A10h,AX=7A11h,AX=7A13h
  4406. --------N-2F7A13-----------------------------
  4407. INT 2F U - Novell NetWare - TBMI v1.1+ - GET INT7A HANDLERS
  4408.     AX = 7A13h
  4409. Return: ES:BX -> old INT 7A handler
  4410.     DS:DX -> TBMI INT 7A handler
  4411. SeeAlso: AX=7A10h,AX=7A11h,AX=7A12h
  4412. --------N-2F7A14-----------------------------
  4413. INT 2F U - Novell NetWare - TBMI v1.1+ - GET STATISTICS
  4414.     AX = 7A14h
  4415.     CX = statistic to retrieve
  4416.         0000h available diagnostic functions???
  4417.         Return: CX = maximum available function??? (000Ch for v2.0)
  4418.         0001h buffers in use
  4419.         Return: CX = TBMI buffers currently in use
  4420.         0002h maximum buffers used
  4421.         Return: CX = maximum number of buffers ever in use
  4422.         0003h unavailable buffers
  4423.         Return: CX = count of unavailable TBMI buffers
  4424.         0004h old interrupt usage
  4425.         Return: CX = TBMI accesses to intercepted old vectors INT 2F,
  4426.                   INT 64, and INT 7A
  4427.         0005h far call usage
  4428.         Return: CX = TBMI accesses to IPX/SPX far call handler (not
  4429.                   including internal accesses)
  4430.         0006h task buffering
  4431.         Return: CX = TBMI task buffering status (enabled/disabled or
  4432.                   disable/enable switch count???)
  4433.         0007h current task ID
  4434.         Return: CX = TBMI current task ID number (0000h if ???)
  4435.         0008h outstanding ID count
  4436.         Return: CX = number of outstanding TBMI IDs
  4437.         0009h configured ECBs
  4438.         Return: CX = number of TBMI Event Control Blocks configured
  4439.         000Ah configured data ECBs
  4440.         Return: CX = number of TBMI data ECBs configured
  4441.         000Bh configured sockets
  4442.         Return: CX = number of TBMI sockets configured (from NETCFG)
  4443.         000Ch current sockets
  4444.         Return: CX = number of TBMI sockets currently in use
  4445. Return: BX = maximum supported subfunction (000Ch)
  4446. SeeAlso: AX=7A10h
  4447. --------N-2F7A15-----------------------------
  4448. INT 2F OU - Novell NetWare - TBMI v1.1 only - RESET ???
  4449.     AX = 7A15h
  4450. Return: BX = new value of ???
  4451. Desc:    set ??? to its default value
  4452. Note:    this call is a NOP under TBMI v2.0 (TBMI2)
  4453. SeeAlso: AX=7A17h
  4454. --------N-2F7A16-----------------------------
  4455. INT 2F OU - Novell NetWare - TBMI v1.1 only - ???
  4456.     AX = 7A16h
  4457.     CX = ???
  4458.     ???
  4459. Return: ???
  4460. Note:    this call is a NOP under TBMI v2.0 (TBMI2)
  4461. --------N-2F7A17-----------------------------
  4462. INT 2F OU - Novell NetWare - TBMI v1.1 only - ???
  4463.     AX = 7A17h
  4464.     ???
  4465. Return: BX = old value of ???
  4466.     CX = new value of ???
  4467. Note:    this call is a NOP under TBMI v2.0 (TBMI2)
  4468. SeeAlso: AX=7A15h
  4469. --------N-2F7A18-----------------------------
  4470. INT 2F U - Novell NetWare - TASKID v1.0 - INSTALLATION CHECK
  4471.     AX = 7A18h
  4472. Return: AL = FFh if installed
  4473.         BX = configuration flags (see #2505)
  4474.         CX = resident code segment
  4475. SeeAlso: AX=7A10h
  4476.  
  4477. Bitfields for NetWare TASKID configuration flags:
  4478. Bit(s)    Description    (Table 2505)
  4479.  0    INT 2F hooked
  4480.  3    INT 08 hooked
  4481.  other    unused
  4482. --------N-2F7A19-----------------------------
  4483. INT 2F U - Novell NetWare - TASKID v1.0 - GET INT 08 HANDLERS
  4484.     AX = 7A19h
  4485. Return: AL = FFh
  4486.     DS:DX -> TASKID INT 08 handler
  4487.     ES:BX -> original INT 08 handler
  4488. --------N-2F7A1A-----------------------------
  4489. INT 2F U - Novell NetWare - TASKID v1.0 - GET INT 2F HANDLERS
  4490.     AX = 7A1Ah
  4491. Return: AL = FFh
  4492.     DX:DX -> TASKID INT 2F handler
  4493.     ES:BX -> original INT 2F handler
  4494. SeeAlso: AX=7A11h,AX=7A19h
  4495. --------N-2F7A1B-----------------------------
  4496. INT 2F U - Novell NetWare - TASKID v1.0 - GET DIAGNOSTICS INFORMATION
  4497.     AX = 7A1Bh
  4498.     CX = desired information
  4499.         0000h supported functions
  4500.         0001h TASKID ID number
  4501.         Return: CX = ID number
  4502.         0002h set-ID count
  4503.         Return: CX = ID set count
  4504. Return: AL = FFh
  4505.     BX = highest supported subfunction number (0002h)
  4506. SeeAlso: AX=7A14h,AX=7A18h
  4507. --------N-2F7A1C-----------------------------
  4508. INT 2F U - Novell NetWare - TBMI v1.1+ - ???
  4509.     AX = 7A1Ch
  4510.     BP = ???
  4511.     CX:DX = ???
  4512. Return: AX = 70FFh
  4513. --------N-2F7A1D-----------------------------
  4514. INT 2F U - Novell NetWare - TBMI v1.1+ - ???
  4515.     AX = 7A1Dh
  4516.     ???
  4517. Return: ES = ???
  4518.     ???
  4519.     SI destroyed
  4520. --------N-2F7A1E-----------------------------
  4521. INT 2F U - Novell NetWare - TBMI v1.1+ - ???
  4522.     AX = 7A1Eh
  4523.     ES:SI -> ???
  4524.     ???
  4525. Return: ???
  4526. --------N-2F7A20BX0000-----------------------
  4527. INT 2F - Novell NetWare - Adv NetWare 4.0 DOS Requester - GET VLM CALL ADDRESS
  4528.     AX = 7A20h
  4529.     BX = 0000h
  4530. Return: AX = 0000h on success (installed)
  4531.         ES:BX -> far call address for DOS Requester (see #2506)
  4532. Notes:    the DOS Requester replaces the NetWare Shell (ANETx, NETx) on
  4533.       NetWare LAN's as of the release of Advanced NetWare 4.0 (1993).  It
  4534.       is backward compatible with NetWare 2.1x through 3.11 servers as
  4535.       well.     Note that there was a NetWare 4.0 in the early 1980's, which
  4536.       can cause confusion.
  4537.     this call is used as the installation check by VLM.EXE, which is the
  4538.       loader for all the modules of the DOS Requester
  4539.     .VLMs are standard old .EXE format executables whose normal entry point
  4540.       merely terminates to prevent loading from the command line.  The
  4541.       real entry point is found by looking at the VLM header at the
  4542.       beginning of the load image (see #2509)
  4543. Index:    installation check;NetWare 4.0 DOS Requester
  4544. SeeAlso: AX=7A20h/BX=0001h,AX=7A20h/BX=0002h
  4545.  
  4546. (Table 2506)
  4547. Call DOS Requester entry point with:
  4548.     STACK:    WORD    destination function
  4549.         WORD    destination VLM ID (see #2508)
  4550.         WORD    source VLM ID (0000h = application program)
  4551.     other registers (except BP) as appropriate for function
  4552. Return: AX = status code (0000h,8811h,8846h,8848h,8853h) (see #2507)
  4553.     ZF set if successful, clear on error
  4554.     other registers as appropriate for function
  4555.     STACK popped
  4556.     BP destroyed
  4557.  
  4558. (Table 2507)
  4559. Values for VLM status code:
  4560.  0000h    successful
  4561.  88xxh    error generated by requester
  4562.  8801h    invalid or non-attached connection handle
  4563.  8802h    drive in use (OS/2 only)
  4564.  8803h    cannot add CDS
  4565.  8804h    bad path
  4566.  8805h    error sending or receiving NCP packets
  4567.  8806h    unknown network error
  4568.  8807h    invalid server connection slot
  4569.  8808h    no connection slots available
  4570.  880Ah    no route to server
  4571.  880Bh    "BAD_LOCAL_TARGET" (OS/2 only)
  4572.  880Ch    too many request fragments
  4573.  880Dh    "CONNECT_LIST_OVERFLOW" (OS/2 only)
  4574.  880Eh    buffer overflow on receive
  4575.  880Fh    no connection to server
  4576.  8810h    no router found (OS/2 only)
  4577.  8811h    nonexistent function called
  4578.  8830h    internal server request attempted between two separate connections
  4579.  8831h    no primary connection set
  4580.  8833h    invalid buffer length
  4581.  8834h    invalid user name
  4582.  8835h    no local print spooler installed
  4583.  8836h    attempted function with invalid parameter
  4584.  8837h    failed to open configuration file (OS/2 only)
  4585.  8838h    no configuration file (OS/2 only)
  4586.  8839h    configuration file read failed (OS/2 only)
  4587.  883Ah    line too long in configuration file (OS/2 only)
  4588.  883Bh    configuration lines ignored (OS/2 only)
  4589.  883Ch    foreign resource
  4590.  883Dh    daemon already installed (OS/2 only)
  4591.  883Eh    print spooler already installed
  4592.  883Fh    local connection table already full
  4593.  8840h    configuration section not found (OS/2 only)
  4594.  8841h    invalid transport type
  4595.  8842h    TDS tag in use (OS/2 only)
  4596.  8843h    TDS out of memory (OS/2 only)
  4597.  8844h    called TDS function with invalid tag
  4598.  8845h    TDS write was truncated
  4599.  8846h    called partially asynchronous function while it was busy
  4600.  8847h    unable to find any responding servers
  4601.  8848h    non-loaded or nonexistent VLM called
  4602.  8849h    network drive already mapped
  4603.  884Ah    attempted map to local drive which was already in use
  4604.  884Bh    no more drives available for mapping
  4605.  884Ch    device is not redirected
  4606.  884Dh    no more SFT entries (too many handles)
  4607.  884Eh    unable to unload
  4608.  884Fh    connection entry was already in use
  4609.  8850h    too many reply fragments
  4610.  8851h    name table already full
  4611.  8852h    socket not open
  4612.  8853h    memory management error
  4613.  8854h    SFT III switch occurred in mid-transfer
  4614.  8855h    preferred server was not found (alternate returned)
  4615.  8856h    device not recognized
  4616.  8857h    bad network byte
  4617.  88A0h    memory allocation error
  4618.  88A1h    connection timeout failure
  4619.  88A2h    transport: bad request
  4620.  88A3h    specified transport not installed
  4621.  88A4h    unable to open connection with specified parameters
  4622.  88A6h    unsupported function
  4623.  88A7h    no such task
  4624.  88A8h    too many tasks
  4625.  88A9h    version mismatch
  4626.  88AAh    request cancelled
  4627.  88ABh    invalid NDS name
  4628.  88ACh    unable to perform operation while logged into NDS
  4629.  88ADh    requester not available for use
  4630.  88AEh    MacIPX not configured properly
  4631.  88AFh    no servers found
  4632.  88B0h    no volume or session associated with identifier
  4633.  88B1h    not a NetWare volume
  4634.  88B2h    MacIPX version incompatible with Requester
  4635.  88B4h    MacIPX not open
  4636.  88B5h    insufficient stack
  4637.  88B6h    client API already initialized
  4638.  88B7h    checksums required by client are not available
  4639.  88B8h    packet signing required by client are not available
  4640.  88B9h    server requires checksum
  4641.  88BAh    server requires packet signing
  4642.  88BBh    already logged in
  4643.  88BCh    negotiated checksums but connection timed out
  4644.  89xxh    error generated by server
  4645.     low byte = return code from server (see also #1580,#1614)
  4646.  8900h    server successful
  4647.  8901h    out of disk space
  4648.  897Eh    NCP boundary check failed
  4649.  897Fh    ???
  4650.  8980h    lock failed; file in use
  4651.  8981h    out of handles
  4652.  8982h    no open privileges
  4653.  8983h    hard (non-correctable) I/O error
  4654.  8984h    no creation privileges
  4655.  8985h    no create/delete privileges
  4656.  8986h    attempted to create a file which already exists read-only
  4657.  8987h    filename error during creation (wildcards in name)
  4658.  8988h    invalid file handle
  4659.  8989h    no search privileges
  4660.  898Ah    no deletion privileges
  4661.  898Bh    no rename privileges
  4662.  898Ch    no modify privileges
  4663.  898Dh    some affected files are in use
  4664.  898Eh    all affected files are in use
  4665.  898Fh    some affected files are read-only
  4666.  8990h    all affected files are read-only; volume read-only
  4667.  8991h    some files could not be renamed because target names already exist
  4668.  8992h    all affected names exist
  4669.  8993h    no read privileges
  4670.  8994h    no write privileges
  4671.  8995h    file detached
  4672.  8996h    server out of memory
  4673.  8997h    no disk space for spool file
  4674.  8998h    disk map error; volume does not exist
  4675.  8999h    directory full
  4676.  899Ah    attempt to rename across volumes
  4677.  899Bh    bad directory handle
  4678.  899Ch    invalid path; no more trustees
  4679.  899Dh    no directory handles
  4680.  899Eh    bad filename
  4681.  899Fh    directory active
  4682.  89A0h    directory not empty
  4683.  89A1h    directory I/O error
  4684.  89A2h    I/O lock error
  4685.  89A3h-89A5h ???
  4686.  89A6h    auditing is active
  4687.  89A7h    auditing version error
  4688.  89A8h    no auditing rights
  4689.  89A3h-89BEh ???
  4690.  89BFh    invalid name space
  4691.  89C0h    no account privileges
  4692.  89C1h    no account balance
  4693.  89C2h    credit limit exceeded
  4694.  89C4h    account disabled
  4695.  89C5h    login lockout (intruder detection activated)
  4696.  89C6h    no console rights
  4697.  89C7h-89CFh
  4698.  89D0h    queue error
  4699.  89D1h    no queue
  4700.  89D2h    no queue server
  4701.  89D3h    no queue rights
  4702.  89D4h    queue full
  4703.  89D5h    no queue job
  4704.  89D6h    no job rights; unencrypted password
  4705.  89D7h    queue servicing error; duplicate password; bad account
  4706.  89D8h    queue not active; password too short
  4707.  89D9h    station not queue server; maximum logins exceeded
  4708.  89DAh    queue halted; bad login time
  4709.  89DBh    maximum queue servers; unauthorized login station
  4710.  89DCh    account disabled or expired
  4711.  89DEh    password expired (all grace logins used up)
  4712.  89DFh    password expired but login allowed (grace login)
  4713.  89E0h-89E6h ???
  4714.  89E7h    no disk track
  4715.  89E8h    property is not an item property; write to group
  4716.  89E9h    member exists
  4717.  89EAh    no such member
  4718.  89EBh    property is not a set property
  4719.  89ECh    no such set
  4720.  89EDh    property exists
  4721.  89EEh    object exists
  4722.  89EFh    illegal name
  4723.  89F0h    illegal wildcard
  4724.  89F1h    invalid bindery security level
  4725.  89F2h    not allowed to read object
  4726.  89F3h    not allowed to write/rename object
  4727.  89F4h    not allowed to delete object
  4728.  89F5h    not allowed to create object
  4729.  89F6h    not allowed to delete property
  4730.  89F7h    not allowed to create property; attempt to use non-local drive
  4731.  89F8h    not allowed to write property; already attached to server
  4732.  89F9h    not allowed to read property; no free connection slots
  4733.  89FAh    temporary remap error; no more server slots
  4734.  89FBh    no such property; invalid parameters
  4735.  89FCh    no such object; internet packet request canceled; unknown file server
  4736.  89FDh    bad station number; lock collision
  4737.  89FEh    directory locked; bindery locked; timeout
  4738.  89FFh    general error; hard error; lock error
  4739. Note:    some server-generated error codes have multiple interpretations; use
  4740.       the one appropriate to the failing call
  4741.  
  4742. (Table 2508)
  4743. Values for VLM identifier:
  4744.  0001h    VLM.EXE        Virtual Loadable Modules manager (see also #2511)
  4745.  0010h    CONN.VLM    connection table manager (see also #2514)
  4746.  0020h    TRAN.VLM    transport protocol multiplexor (see also #2518)
  4747.  0021h    IPXNCP.VLM    transport protocol implementation using IPX (see #2520)
  4748.  0022h    TCPNCP.VLM    TCP/IP transport
  4749.  0030h    NWP.VLM        NetWare protocol multiplexor (see also #2522)
  4750.  0031h    BIND.VLM    bindery
  4751.  0032h    NDS.VLM        NetWare Directory Services (see also #2524)
  4752.  0033h    PNW.VLM        Personal NetWare
  4753.  0034h    RSA.VLM        RSA encryption for directory services re-authentication
  4754.  0040h    REDIR.VLM    DOS redirector (see also #2526)
  4755.  0041h    FIO.VLM        file I/O (see also #2529)
  4756.  0042h    PRINT.VLM    printer redirector (see also #2531)
  4757.  0043h    GENERAL.VLM    misc functions for NETx and REDIR (see also #2535)
  4758.  0050h    NETX.VLM    NetWare shell compatibility (see also #2537)
  4759.  0060h    AUTO.VLM    auto-reconnect/auto-retry
  4760.  0061h    SECURITY.VLM    enhanced security module (see #2539)
  4761.  0100h    NMR.VLM        NetWare management responder
  4762.  09F2h    DRVPRN.VLM    Desktop SNMP Services - Drive/Printer Mappings
  4763.  09F5h    SAA.VLM        SAA client API for Netware
  4764.  09F6h    IPXMIB.VLM    SNMP IPX-monitoring Module???
  4765.  09F7h    PNWMIB.VLM    Personal Netware SNMP Instrumentation Module
  4766.  09F8h    PNWTRAP.VLM    Personal Netware SNMP Trap Module
  4767.  09F9h    MIB2PROT.VLM    MIB-II Protocol Groups
  4768.  09FAh    MIB2IF.VLM    MIB-II Interfaces Group
  4769.  09FBh    NVT.VLM        ???
  4770.  09FCh    WSTRAP.VLM    Desktop SNMP Services - Trap Module
  4771.  09FDh    WSREG.VLM    Desktop SNMP Services - Registration Module
  4772.  09FEh    WSASN1.VLM    Desktop SNMP Services - ASN.1 Module
  4773.  09FFh    WSSNMP.VLM    Desktop SNMP Services - Agent Module
  4774.  
  4775. Format of VLM header:
  4776. Offset    Size    Description    (Table 2509)
  4777.  00h    DWORD    -> initialization entry point
  4778.  04h    DWORD    -> VLM API entry point
  4779.  08h    DWORD    -> ??? entry point
  4780.  0Ch    DWORD    -> ??? entry point
  4781.  10h    DWORD    -> ??? entry point
  4782.     ...
  4783.  var    DWORD    00000000h (end of entry point list)
  4784.       4 BYTEs    signature "NVlm"
  4785.     WORD    VLM identifier (see #2508)
  4786. ---v1.20+ ---
  4787.  1Eh    WORD    ???
  4788.  20h    WORD    Transient Switch Count
  4789.  22h    WORD    VLM Call Count
  4790.  24h    WORD    Offset ControlBlocks (See #2510)
  4791.  26h    WORD    Current VLMID
  4792.  28h    BYTE    Memory Type
  4793.         00h=Conventional 02h=EMS 04h=XMS
  4794.  29h    BYTE    Modules Loaded
  4795.  2Ah    WORD    BlockId
  4796.  2Ch    WORD    Transient Block
  4797.  2Eh    WORD    Global Segment
  4798.  30h  3    DWORDs    pointers to AsyncQueue head, tail, and s???
  4799.  3Ch  3    DWORDs    pointers BusyQueue head, tail, and s???
  4800.  48h    WORD    ReEntrance Level
  4801.  4Ah    WORD    Full Map Count
  4802.  4Ch    WORD    ???
  4803.  4Eh 80 BYTEs    ASCIZ configuration file filename
  4804. Note:    the number of entry points in the header is reported as "Func" in the
  4805.       VLM /D display.
  4806.  
  4807. Format of VLM Control Block for VLM v1.20 [array]:
  4808. Offset    Size    Description    (Table 2510)
  4809.  00h    WORD    Flag
  4810.  02h    WORD    VLM Identifier (See #2508)
  4811.  04h    WORD    Func
  4812.  06h    WORD    Maps
  4813.  08h    WORD    number of times called
  4814.  0Ah    WORD    ???
  4815.  0Ch    WORD    Transient Segment
  4816.  0Eh    WORD    Global Segment
  4817.  10h    WORD    Address Low
  4818.  12h    WORD    Address High
  4819.  14h    WORD    TSegSize
  4820.  16h    WORD    GSegSize
  4821.  18h    WORD    SSegSize
  4822.  1Ah    BYTE    VLMName[9] ASCIZ
  4823. Note:    this information is shown in VLM /d under the dashed line. There are
  4824.       as many 35-byte blocks as modules loaded
  4825. SeeAlso: #2509
  4826.  
  4827. (Table 2511)
  4828. Call VLM Manager (VLM.EXE, ID 0001h) with:
  4829. Func    Description/Registers
  4830.  01h    VLM Notify
  4831.     BX = function
  4832.         0000h get version
  4833.         Return: AX = status (see #2507)
  4834.             BX = major version of VLM supported (0001h)
  4835.             CX = minor version of VLM supported (0000h)
  4836.  03h    VLM Statistics
  4837.     CX = length of buffer
  4838.     ES:DI -> buffer for statistics (see #2512)
  4839.     Return: AX = status (0000h if successful)
  4840.         buffer filled if successful
  4841.  04h    VLM internal use
  4842.     BX = function
  4843.         0000h get interrupt vector (calls INT 21/AH=35h)
  4844.         0001h begin critical section (calls INT 2F/AX=1681h)
  4845.         0002h end critical section (calls INT 2F/AX=1682h)
  4846.         0003h ???
  4847.  
  4848. Format of VLM.EXE statistics:
  4849. Offset    Size    Description    (Table 2512)
  4850.  00h    WORD    size of statistics record in bytes (including this word)
  4851.  02h    WORD    number of times a VLM has been mapped into memory
  4852.  04h    WORD    number of times a VLM has been called
  4853.  06h    WORD    offset of vcbArray buffer
  4854.  08h    WORD    VLM ID of VLM currently mapped into memory
  4855.  0Ah    BYTE    memory type: conventional/EMS/XMS
  4856.  0Bh    BYTE    number of loaded VLMs
  4857.  0Ch    WORD    EMS/XMS handle or 0000h if conventional memory
  4858.  0Eh    WORD    start segment for conventional memory swap
  4859.  10h    WORD    segment for global memory, or 0000h if conventional memory
  4860.  12h 12 BYTEs    queue structure for asynchronous calls (see #2513)
  4861.  1Eh 12 BYTEs    queue structure for synchronous calls (see #2513)
  4862.  2Ah    WORD    current re-entrance level
  4863.  2Ch    WORD    number of times EMS/XMS map-out performed
  4864.  2Eh    BYTE    stack switch control
  4865.  2Fh    BYTE    flag: nonzero if switcher loaded
  4866.  30h 80 BYTEs    pathname of configuration file
  4867. SeeAlso: #2511
  4868.  
  4869. Format of VLM.EXE queue structure:
  4870. Offset    Size    Description    (Table 2513)
  4871.  00h    DWORD    queue head (initially 00000000h)
  4872.  04h    DWORD    queue tail (initialized to be same as head)
  4873.  08h    WORD    current queue size (number of nodes in queue)
  4874.  0Ah    WORD    maximum queue size (in nodes)
  4875. SeeAlso: #2512
  4876.  
  4877. (Table 2514)
  4878. Call Connection Manager (CONN.VLM, ID 0010h) with:
  4879. Func    Description/Registers
  4880.  01h    Conn Get Version
  4881.     BX = function
  4882.         0000h get version
  4883.         Return: AX = status (see #2507)
  4884.             BX = major version of VLM supported (0001h)
  4885.             CX = minor version of VLM supported (0000h)
  4886.  03h    Conn Statistics
  4887.     CX = length of buffer
  4888.     ES:DI -> buffer for connection statistics (see #2515)
  4889.     Return: AX = status (0000h successful)
  4890.  04h    Conn Alloc Handle
  4891.     Return: AX = status (0000h successful)
  4892.         CX = connection handle
  4893.  05h    Conn Validate Handle
  4894.     CX = connection handle
  4895.     Return: AX = 0000h if valid handle
  4896.  06h    Conn Free Handle
  4897.     CX = connection handle
  4898.     Return: AX = status (0000h successful)
  4899.  07h    Conn Get Entry Field
  4900.     BH = connection parameter (see #2517)
  4901.     CX = connection handle
  4902.     DX = value if BH is non-array parameter
  4903.     DH = offset in array if BH is array parameter
  4904.     DL = number of bytes to copy if BH is array
  4905.     ES:DI -> return buffer if BH is array
  4906.     Return: AX = 0000h if successful
  4907.         DL/DX = value if non-array parameter
  4908.         DH = maximum number of bytes in buffer if array parameter
  4909.         DL = number of bytes copied if array
  4910.         BX destroyed
  4911.  08h    Conn Set Entry Field
  4912.     BH = connection parameter (see #2517)
  4913.     CX = connection handle
  4914.     DL/DX = value if BH is non-array parameter
  4915.     DH = offset in array if BH is array parameter
  4916.     DL = number of bytes to copy if BH is array
  4917.     DS:SI -> buffer if BH is array
  4918.     Return: AX = 0000h if successful
  4919.         DH = maximum number of bytes in buffer
  4920.         DL = number of bytes copied
  4921.         BX destroyed
  4922.  09h    Conn Reset Entry Field
  4923.     BH = connection parameter (see #2517)
  4924.     CX = connection handle
  4925.     Return: AX = 0000h if successful
  4926.         BX,DX destroyed
  4927.  0Ah    Conn Lookup Handle
  4928.     BL = lookup type (00h equal, 40h not equal)
  4929.     BH = connection parameter (see #2517)
  4930.     CX = connection handle, 0000h if first
  4931.     DL/DX = value if BH is non-array parameter
  4932.     DH = offset in array if BH is array parameter
  4933.     DL = number of bytes to copy if BH is array
  4934.     DS:SI (ES:DI???) -> buffer if BH is array
  4935.     Return: AX = 0000h if successful
  4936.         CX = handle matching given parameters
  4937.  0Dh    Conn Name Lookup
  4938.     CX = connection handle
  4939.     ES:DI -> 49-byte buffer for server name or 0000h:0000h
  4940.     Return: AX = 0000h if successful
  4941.         BX = length of server name
  4942.         ES:DI buffer filled if pointer not 0000h:0000h
  4943.  0Eh    Conn Name To Handle
  4944.     DS:SI -> uppercased server name
  4945.     CX = length of server name, 0000h if ASCIZ name
  4946.     Return: AX = error code or 0000h if successful
  4947.             CX = connection handle if successful
  4948.  0Fh    Conn Get Num Connections
  4949.     Return: AX = status (0000h if successful)
  4950.         DX = number of connections
  4951.         CX = segment of connection table
  4952.             first entry in table (See #2516)
  4953.  
  4954. Format of VLM connection statistics:
  4955. Offset    Size    Description    (Table 2515)
  4956.  00h    WORD    total length of statistics record (including this word)
  4957.  02h    WORD    number of connection handles allocated
  4958.  04h    WORD    average name length (configured in NET.CFG)
  4959.  06h    WORD    maximum number of tasks (configured in NET.CFG)
  4960.  08h    WORD    number of failed "allocate handle" calls
  4961.  0Ah    WORD    number of failed "add name" calls
  4962.  0Ch    WORD    number of failed task calls
  4963. Note:    some versions of the NetWare requester reportedly do not implement
  4964.       this correctly
  4965. SeeAlso: #2514
  4966.  
  4967. Format of NetWare VLM Connection Table [array]:
  4968. Offset    Size    Description    (Table 2516)
  4969.  00h    WORD    Protocol VLMid      0032(NDS) 0031(BIND)        Func 07 equiv.
  4970.                   0033(PNW) 0000(unused)       BH=01h
  4971.  02h    BYTE    (connection status)
  4972.         bit 6: connection locked               BH=16h
  4973.         bit 5: authenticated                   BH=03h
  4974.         bit 4: permanent                   BH=02h
  4975.         bit 2: broadcast msg waiting               BH=12h
  4976.  03h    BYTE    (connection capabilities)
  4977.         bit 5: Large Internet Packets               none
  4978.         bit 3: Packet Burst Reset               BH=07h
  4979.         bit 2: Max I/O                       BH=06h
  4980.         bit 1: SFT3 change                   BH=05h
  4981.         bit 0: Packet Burst Support               BH=04h
  4982.  04h    WORD    reference count                       BH=09h
  4983.  06h    WORD    soft resource count                   BH=15h
  4984.  08h    BYTE    NCP Order Number                   BH=0Eh
  4985.  09h    BYTE    Server security options                   BH=14h
  4986.         bit 0: CRC enabled
  4987.         bit 1: packet signing required
  4988.         bit 5: packet signing enabled
  4989.  0Ah    BYTE    OS Major Version                   BH=08h
  4990.  0Bh    BYTE    OS Minor Version                   BH=08h
  4991.  0Ch    WORD    Hops to Server                       BH=0Ah
  4992.  0Eh    WORD    Maximum Packet Size for this connection           BH=0Bh
  4993.  10h    WORD    LIP Parameters                       BH=13h
  4994.  12h    WORD    NCP Request Type                   BH=10h
  4995.  14h    BYTE    NCP Sequence                       BH=0Ch
  4996.  15h    WORD    Connection Number                   BH=0Dh
  4997.  17h    BYTE    ???                           none
  4998.  18h    WORD    Transport VLMid 21(IPXNCP) 22(TCPNCP)           BH=0Fh
  4999.  1Ah    BYTE    Node Address[4]                       BH=11h
  5000.  1Eh    BYTE    Network[6]                       BH=11h
  5001.  24h    BYTE    Socket[2]                       BH=11h
  5002.  26h    BYTE    Local Target[6]                       BH=11h
  5003.  2Ch    WORD    Round Trip Time                       BH=11h
  5004.  2Eh    WORD    ???                           none
  5005. SeeAlso: #2514
  5006.  
  5007. (Table 2517)
  5008. Values for NetWare Connection Manager CEI (Connection Entry Information):
  5009.  number    flags    description
  5010.  00h    FR    error
  5011.  01h    WL    VLM id of transport protocol (NDS/BIND/PNW)
  5012.         00h = wildcard
  5013.  02h    FR    permanent flag (01h if connection is permanent)
  5014.  03h    F    authenticated flag (01h if connection is authenticated)
  5015.  04h    F    packet burst supported
  5016.  05h    FR    SFT3 change status
  5017.  06h    FR    connection needs maximum I/O transmission
  5018.  07h    FR    packet burst reset needed
  5019.  08h    W    server version
  5020.  09h    W    reference count (tasks using connection, 00h = dynamic)
  5021.  0Ah    W    distance to server associated with connection
  5022.  0Bh    W    maximum packet size supported by transport protocol
  5023.  0Ch    B    NCP sequence number
  5024.  0Dh    W    connection number
  5025.  0Eh    B    NCP order number
  5026.  0Fh    WL    VLM id for transport protocol
  5027.         00h = wildcard, 21h = IPX, 22h = TCP
  5028.  10h    W    NCP request type
  5029.  11h    A    transport specific buffer
  5030.         12 byte server address
  5031.         6 byte    router address
  5032.         2 byte round trip time
  5033.  12h    FR    broadcast message waiting
  5034.  13h    W    large internet packets supported
  5035.  14h    B    security options
  5036.         bit 0: CRC enabled
  5037.         bit 1: packet signing enabled
  5038.         bit 5: packet signing active
  5039.  15h    W    soft resource count
  5040.  16h    FR    connection locked
  5041. Note:    flag meanings
  5042.         F=flag value
  5043.         B=byte value
  5044.         W=word value
  5045.         A=array
  5046.         R=resettable
  5047.         L=settable only before authentication
  5048.         others=read only
  5049. SeeAlso: #2514
  5050.  
  5051. (Table 2518)
  5052. Call TRAN.VLM (VLM ID 0020h) with:
  5053. Func    Description/Registers
  5054.  01h    TRAN Get Version
  5055.     BX = function
  5056.         0000h get version
  5057.         Return: AX = status (see #2507)
  5058.             BX = major version of VLM supported (0001h)
  5059.             CX = minor version of VLM supported (0000h)
  5060.  03h    TRAN Statistics
  5061.  06h    TRAN Request Reply (see INT 21/AH=F2h)
  5062.     AL = NCP request code (see #1750 at INT 21/AH=F2h)
  5063.     BH = error handler flag
  5064.         00h default error handler
  5065.         01h return network errors to caller
  5066.         02h handle network errors in requester
  5067.     BL = request list length (max 5 fragments) (see #2519)
  5068.     CX = connection handle
  5069.     DH = 00h (reserved)
  5070.     DL = reply list length (max 5 fragments) (see #2519)
  5071.     DS:SI -> address list (each element is DWORD address + WORD length)
  5072.     ES:DI -> address list
  5073.     Return: AX = error code, 0000h if successful (see #2507)
  5074.         BX,DX destroyed
  5075.         ES:DI buffer filled with reply packet fragments
  5076.  08h    TRAN Schedule/Cancel Event
  5077.     BX = subfunction
  5078.         0000h schedule event
  5079.         AX = number of timer ticks to delay before calling function
  5080.         ES:SI -> event control block (including valid call address)
  5081.         0001h cancel event
  5082.         ES:SI -> event control block (including call address)
  5083.     Return: AX = status (0000h = successful) (see #2507)
  5084.  09h    TRAN Get Max Phys Size
  5085.     BX = subfunction
  5086.         00h get maximum node size
  5087.         Return: AX = status (0000h = successful) (see #2507)
  5088.             BX = maximum supported physical packet size
  5089.             DX = size of protocol header
  5090.             SI = RequestReply socket number
  5091.         01h get maximum route size to specified server
  5092.         CX = connection handle for route to be checked
  5093.         Return: AX = status (0000h = successful) (see #2507)
  5094.             DX = maximum supported packet size for current route
  5095.  0Ah    TRAN Broadcast Mux
  5096.     BX = subfunction
  5097.         0001h get stored broadcast (Personal NetWare)
  5098.         ES:DI -> 60-byte buffer for counted ASCIZ message string
  5099.     Return: AX = status (0000h = successful) (see #2507)
  5100.  
  5101. Format of TRAN.VLM request/reply fragment descriptor (array):
  5102. Offset    Size    Description    (Table 2519)
  5103.  00h    DWORD    address of buffer
  5104.  04h    WORD    length of buffer
  5105.  
  5106. (Table 2520)
  5107. Call IPXNCP.VLM (VLM ID 0021h) with:
  5108. Func    Description/Registers
  5109.  01h    IPX Get Version
  5110.     BX = function
  5111.         0000h get version
  5112.         Return: AX = status (see #2507)
  5113.             BX = major version of VLM supported (0001h)
  5114.             CX = minor version of VLM supported (0000h)
  5115.  03h    IPX Statistics
  5116.     CX = length of buffer
  5117.     ES:DI -> buffer for statistics (see #2521)
  5118.     Return:    AX = status (see #2507)
  5119.  06h    IPXNCP Request Reply???
  5120.     functionally equivalent to Tran Request Reply???
  5121.  
  5122. Format of NetWare IPX statistics:
  5123. Offset    Size    Description    (Table 2521)
  5124.  00h    WORD    size of statistics, including this word
  5125.  02h    DWORD    number of TRAN Request Reply calls made
  5126.  06h    WORD    number of user aborts
  5127.  08h    WORD    number of user retries
  5128.  0Ah    WORD    IPX receive errors
  5129.  0Ch    WORD    IPX send errors
  5130.  0Eh    WORD    number of unrecognized responses
  5131.  10h    WORD    number of bad connection numbers in requests
  5132.  12h    WORD    number of bad sequence responses
  5133.  14h    WORD    receive buffer overflows
  5134.  16h    WORD    number of times route to attached server was lost
  5135.  18h    WORD    number of times server responded "busy"
  5136.  1Ah    WORD    number of unknown "NCPRepCompCode" values
  5137.  1Ch    WORD    number of bad connection numbers in responses
  5138.  1Eh    WORD    padding for NETX compatibility
  5139.  20h    WORD    padding for NETX compatibility
  5140.  22h    WORD    number of attach requests to server without route
  5141.  24h    WORD    number of times server responded to attach without slot
  5142.  26h    WORD    number of times a server went down during a request
  5143.  28h    DWORD    same-server optimizations
  5144.  2Ch    WORD    local route changes
  5145.  2Eh    WORD    IPX CRC errors
  5146.  30h    WORD    number of user fails
  5147.  32h    BYTE    flag: CRCs enabled
  5148.  33h    BYTE    flag: LIP enabled
  5149.  34h    BYTE    flag: configurable NET error handler
  5150. SeeAlso: #2520
  5151.  
  5152. (Table 2522)
  5153. Call NWP.VLM (VLM ID 0030h) with:
  5154. Func    Description/Registers
  5155.  01h    NWP Get Version
  5156.     BX = function
  5157.         0000h get version
  5158.         Return: AX = status (see #2507)
  5159.             BX = major version of VLM supported (0001h)
  5160.             CX = minor version of VLM supported (0000h)
  5161.  03h    NWP Statistics
  5162.     CX = size of buffer for statistics
  5163.     ES:DI -> buffer for statistics (see #2523)
  5164.     Return: AX = status (see #2507)
  5165.  04h    NWP Connect
  5166.     DL = resource count state (NDS connections only)
  5167.     CX = proposed connection handle (not yet connected to server)
  5168.     DS:SI -> 48-byte server name (NUL-terminated if less than 48 bytes)
  5169.     Return: AX = status (0000h = successful) (see #2507)
  5170.         CX = actual connection handle to use
  5171.     Note:    if the returned handle differs from the proposed handle, the
  5172.           proposed handle should be freed
  5173.  05h    NWP Disconnect
  5174.     DL = ???
  5175.         00h global disconnect -- clear all resources associated with conn.
  5176.         01h destroy connection -- send disconnect request to server
  5177.     CX = connected connection handle
  5178.     Return: AX = status (0000h = successful) (see #2507)
  5179.  06h    NWP Attach
  5180.     DL = resource count state (NDS connections only)
  5181.     CX = connection handle (allocated by not yet attached to server)
  5182.     DS:SI -> full network address for desired server
  5183.     Return: AX = status (0000h = successful) (see #2507)
  5184.  08h    NWP Login
  5185.     BX = object type
  5186.     CX = connection handle (must be connected) to be authenticated
  5187.     DS:SI -> ASCIZ user name (max 48 bytes)
  5188.     ES:DI -> ASCIZ user password (max 128 bytes)
  5189.     Return: AX = status (0000h = successful) (see #2507)
  5190.  09h    NWP Logout
  5191.     CX = connection handle
  5192.     Return: AX = status (0000h = successful) (see #2507)
  5193.  0Ah    NWP Get Bindery Object/Get Message Handler
  5194.     BX = subfunction
  5195.         0002h set workstation's broadcast message mode
  5196.         DL = message mode
  5197.             00h client hold client message set on, retrieve/display on
  5198.             01h client hold client message set off, retr/display on
  5199.             02h client hold client message set on, retrieve/dislay off
  5200.             03h client hold client message set off, retr/display off
  5201.             04h get current message mode
  5202.             05h set broadcast callback
  5203.             CX:SI -> callback handler
  5204.             06h get broadcast timeout
  5205.             07h set broadcast timeout
  5206.             CX = timeout in timer ticks (0000h = never)
  5207.         CX = connection handle, or 0000h to notify all servers
  5208.         0003h get object ID for object name
  5209.         AX = object type (big-endian)
  5210.         CX = connection handle
  5211.         DX = length of object name
  5212.         ES:DI -> uppercased ASCIZ object name
  5213.         Return: AX = status (see #2507)
  5214.             DX:BX = object ID
  5215.         0004h get object name for object ID
  5216.         DX:SI = object ID
  5217.         CX = connection handle for server which is to do the lookup
  5218.         ES:DI -> 48-byte buffer for object name
  5219.         Return: AX = status (see #2507)
  5220.         0005h retrieve broadcast message
  5221.  0Ch    NDS Fragment Request (passed to NDS.VLM's function 0Ch) (see #2524)
  5222.     AX = verb or request type
  5223.     CX = connection handle
  5224.     DS:SI -> request structure (DWORD data address followed by WORD size)
  5225.     ES:DI -> buffer for reply structure (same format as request)
  5226.     Return: AX = status (0000h = successful) (see #2507)
  5227.  0Eh    NWP Ordered Send To All
  5228.     AL = NCP request code
  5229.     AH = inverse request code (FFh if none) to back out from failures
  5230.     BX = number of fragments in request list
  5231.     DX = number of fragments in reply list buffer
  5232.     DS:SI -> request fragment list
  5233.     ES:DI -> reply fragment list
  5234.     Return: AX = status (see #2507)
  5235.         BX, CX, DX destroyed
  5236.     Note:    the available functions are described under INT 21/AX=F2xxh
  5237.  0Fh    NWP Preferred Handler
  5238.     BX = subfunction
  5239.         0000h get preferred connection name
  5240.         DX = VLM ID (NDS/BIND/PNW)
  5241.         ES:DI -> 49-byte buffer for connection name
  5242.         Return: ES:DI buffer filled
  5243.         0001h set preferred connection name
  5244.         DX = VLM ID (NDS/BIND/PNW)
  5245.         CX = length of connection name (may be 0000h, max 48)
  5246.         DS:SI -> name of preferred connection
  5247.         0002h get preferred connection ID
  5248.         DX = VLM ID (NDS/BIND/PNW)
  5249.         Return: AX = status (see #2507)
  5250.             CX = connection handle if successful
  5251.         0003h get server address
  5252.         CX = connection handle or 0000h
  5253.         DS:SI -> ASCIZ name to be resolved
  5254.         ES:DI -> 12-byte buffer for server address
  5255.  10h    NWP Security???
  5256.     BX = subfunction
  5257.         0001h get security flags (see also INT 21/AX=B301h)
  5258.         Return: BX:CX indicates signature level
  5259.                 = 0100h:0000h if signature level=0
  5260.                 = 0300h:0000h if signature level=1
  5261.                 = 0302h:0000h if signature level=2
  5262.                 = 0302h:0202h if signature level=3
  5263.         0002h create session keys (see also INT 21/AX=B302h)
  5264.         CX = server connection handle
  5265.         DS:SI -> 24-byte input buffer
  5266.         0004h set security flags (see also INT 21/AX=B304h)
  5267.         BL:CL = new flags
  5268.         0006h renegotiate security level (see also INT 21/AX=B306h)
  5269.         CX = server connection number (01h-08h)
  5270.  
  5271. Format of NWP.VLM statistics:
  5272. Offset    Size    Description    (Table 2523)
  5273.  00h    WORD    size of statistics record (including this byte)
  5274.  02h    BYTE    flag: Large Internet Packets enabled
  5275.  03h    BYTE    bit flags: enabled security features
  5276.  04h    BYTE    bit flags: preferred security features
  5277.  05h    BYTE    bit flags: required security features
  5278.  06h    BYTE    minimum level of required security
  5279. SeeAlso: #2522
  5280.  
  5281. (Table 2524)
  5282. Call NDS.VLM (VLM ID 0032h) with:
  5283. Func    Description/Registers
  5284.  01h    NDS Get Version
  5285.     BX = function
  5286.         0000h get version
  5287.         Return: AX = status (see #2507)
  5288.             BX = major version of VLM supported (0001h)
  5289.             CX = minor version of VLM supported (0000h)
  5290.  03h    NDS Statistics
  5291.  06h    NDS Attach
  5292.     CX = allocated connection handle
  5293.     DS:SI -> server address
  5294.  08h    NDS Fragment Requst
  5295.     Return: AX = 8836h (invalid parameter)
  5296.     Note:    this function was documented but does not work
  5297.  0Ch    NDS context
  5298.     BX = subfunction
  5299.         0000h get default name context
  5300.         CX = length of buffer for default context
  5301.         ES:DI -> buffer to receive name
  5302.         Return: ES:DI buffer filled
  5303.         0001h set default context
  5304.         CX = length of new default context name
  5305.         DS:SI -> context name
  5306.         0002h read from TDS
  5307.         CX = reply buffer length
  5308.         DX = 0110h ???
  5309.         SI = offset in TDS
  5310.         ES:DI -> reply buffer
  5311.         0003h write to TDS
  5312.         0005h "NWDSChangeResourceConnection/Lock Connection"
  5313.         CX = connection handle
  5314.         DL = subfunction (00h-09h)
  5315.             04h = NWDSChangeResourceOnConnection
  5316.             07h = NWDSChangeResourceOnConnection
  5317.             08h = NWDSLockConnection
  5318.         0006h NDS change connection state (internal)
  5319.         CX = connection handle
  5320.         AL = 00h or 01h
  5321.         0007h "NWDSSetMonitoredConnection"
  5322.         AX = subfunction
  5323.             0001h get monitored connection
  5324.             Return: CX = connection handle???
  5325.             0002h set monitored connection
  5326.             CX = connection handle???
  5327.         0008h send NDS request
  5328.         AX = NDS function
  5329.         CX = connection handle
  5330.         DS:SI -> request buffer descriptor (see #2525)
  5331.         ES:DI -> reply buffer descriptor (see #2525)
  5332.         000Ah set NDS CEI Info
  5333.         DL = buffer length
  5334.         DS:SI -> input buffer
  5335.  
  5336. Format of NetWare NDS request/reply buffer descriptor:
  5337. Offset    Size    Description    (Table 2525)
  5338.  00h    DWORD    -> buffer
  5339.  04h    WORD    length of buffer in bytes
  5340. SeeAlso: #2524
  5341.  
  5342. (Table 2526)
  5343. Call REDIR.VLM (VLM ID 0040h) with:
  5344. Func    Description/Registers
  5345.  01h    Redir Get Version
  5346.     BX = function
  5347.         0000h get version
  5348.         Return: AX = status (see #2507)
  5349.             BX = major version of VLM supported (0001h)
  5350.             CX = minor version of VLM supported (0000h)
  5351.  03h    Redir Statistics
  5352.     CX = length of buffer
  5353.     ES:DI -> buffer for statistics (see #2527)
  5354.     Return: AX = status (0000h if successful) (see #2507)
  5355.         buffer filled if successful
  5356.  04h    Redir Build SFT (see INT 21/AH=B4h"NetWare")
  5357.     CX = connection handle
  5358.     ES:DI -> SFT build request (see #2528)
  5359.     Return: AX = 0000h if successful
  5360.             BX = DOS file handle
  5361.  05h    Redir DOS To NW Handle
  5362.     BX = DOS file handle
  5363.     ES:DI -> 11-byte buffer for NetWare handle
  5364.  08h    Redir Specific
  5365.     BX = 0000h get item
  5366.         DS:SI -> ASCIZ string "LPTx" (x='1'-'9') or drive spec ("d:")
  5367.         ES:DI -> 512-byte reply buffer for
  5368.               "\\server\resource",00h,"path",00h
  5369.     Return: AX = status (0000h if successful) (see #2507)
  5370.  
  5371. Format of REDIR.VLM statistics:
  5372. Offset    Size    Description    (Table 2527)
  5373.  00h    WORD    size of statistics record (including this word)
  5374.  02h    WORD    number of network errors causing a critical error (see INT 24)
  5375.  04h    WORD    number of drives currently redirected
  5376. SeeAlso: #2526
  5377.  
  5378. Format of NetWare SFT build request:
  5379. Offset    Size    Description    (Table 2528)
  5380.  00h  6 BYTEs    NetWare handle
  5381.  06h    WORD    reserved for internal use
  5382.  08h 14 BYTEs    ASCIZ filename
  5383.  16h    BYTE    DOS file attributes
  5384.         bit 7: file is shareable
  5385.  17h    BYTE    reserved
  5386.  18h    LONG    file size
  5387.  1Ch    WORD    creation date
  5388.  1Eh    WORD    last access date or 0000h
  5389.  20h    WORD    last update date or 0000h
  5390.  22h    WORD    last update time or 0000h
  5391.  
  5392. (Table 2529)
  5393. Call File I/O FIO.VLM (VLM ID 0041h) with:
  5394. Func    Description/Registers
  5395.  01h    FIO Get Version
  5396.     BX = function
  5397.         0000h get version
  5398.         Return: AX = status (see #2507)
  5399.             BX = major version of VLM supported (0001h)
  5400.             CX = minor version of VLM supported (0000h)
  5401.  03h    FIO Statistics
  5402.     CX = length of buffer
  5403.     ES:DI -> buffer for statistics (see #2530)
  5404.     Return: AX = status (0000h if successful)
  5405.         buffer filled if successful
  5406.  04h    FIO Remote Copy
  5407.  
  5408. Format of NetWare FIO statistics:
  5409. Offset    Size    Description    (Table 2530)
  5410.  00h    WORD    length of statistics record (including this word)
  5411.  02h    WORD    number of read requests
  5412.  04h    WORD    number of write requests
  5413.  06h    WORD    number of cache read hits
  5414.  08h    WORD    number of cache write hits
  5415.  0Ah    WORD    number of cacheable files with free blocks
  5416.  0Ch    WORD    number of cacheable files without free blocks
  5417.  0Eh    WORD    number of standard read requests
  5418.  10h    WORD    number of standard write requests
  5419.  12h    WORD    number of burst read requests
  5420.  14h    WORD    number of burst write requests
  5421.  16h    BYTE    flag: cache writes enabled
  5422.  17h    BYTE    flag: true commits enabled
  5423.  18h    WORD    number of cache blocks
  5424.  1Ah    WORD    size of a cache buffer
  5425.  1Ch    WORD    number of ECBs for packet bursts (0000h if bursts disabled)
  5426. SeeAlso: #2529
  5427.  
  5428. (Table 2531)
  5429. Call PRINT.VLM (VLM ID 0042h) with:
  5430. Func    Description/Registers
  5431.  01h    Print Get Version
  5432.     BX = function
  5433.         0000h get version
  5434.         Return: AX = status (see #2507)
  5435.             BX = major version of VLM supported (0001h)
  5436.             CX = minor version of VLM supported (0000h)
  5437.  03h    Print Statistics
  5438.     CX = length of buffer
  5439.     ES:DI -> buffer for statistics (see #2532)
  5440.     Return: AX = status (0000h if successful) (see #2507)
  5441.         buffer filled if successful
  5442.  04h    Print Get/Set Data
  5443.     BX = subfunction
  5444.         00h set printer control flags (see #2533)
  5445.         01h get printer control flags
  5446.         02h set extended printer control flags (see #2534)
  5447.         03h get extended printer control flags
  5448.     AX = offset within Print structures at which to start read/write
  5449.     CX = number of bytes to transfer
  5450.     DX = printing device number (00h=LPT1/PRN, 01h=LPT2, etc.)
  5451.     DS:SI -> buffer containing values for flags (subfunctions 00h/02h)
  5452.     ES:DI -> buffer for flags (subfunctions 01h/03h
  5453.     Return: AX = status (see #2507)
  5454.         ---if successful---
  5455.         CX = number of bytes returned (subfunctions 01h/03h)
  5456.         DX = maximum supported size for function/type of data
  5457.  05h    Print Open Capture File
  5458.  07h    Print Get Num Of Printers
  5459.     BX = subfunction
  5460.         0000h get number of physical printers
  5461.         nonzero: get configured printer (from NET.CFG)
  5462.     Return: AX = status (see #2507)
  5463.         ---if successful---
  5464.         BX = number of physical/configured printers
  5465.  08h    Print Redirection
  5466.     BX = subfunction
  5467.         0000h redirect device to queue
  5468.         AX = length of queue name, 0000h to use queue ID
  5469.         CX = connection handle
  5470.         DX = printer/device number (00h=LPT1/PRN, 01h=LPT2, etc.)
  5471.         DS:SI -> uppercased ASCIZ queue name
  5472.         ES:DI -> DWORD queue ID, 00000000h to use queue name
  5473.         0001h test whether device is redirected
  5474.         DX = printer/device number (00h=LPT1/PRN, 01h=LPT2, etc.)
  5475.         0002h cancel redirection
  5476.         DX = printer/device number (00h=LPT1/PRN, 01h=LPT2, etc.)
  5477.         0003h redirect device to file
  5478.         AX = 0000h or 4E57h ('NW')
  5479.         CX = connection handle
  5480.         DX = printer/device number (00h=LPT1/PRN, 01h=LPT2, etc.)
  5481.         ES:DI -> ASCIZ path of file
  5482.         0004h get extended redirection information (see #2533)
  5483.         DX = printer/device number (00h=LPT1/PRN, 01h=LPT2, etc.)
  5484.         ES:DI -> buffer for server/queue name
  5485.         Return: ES:DI buffer filled
  5486.     Return: AX = 0000h if successful
  5487.  09h    Print Flush And Close Job
  5488.     BX = subfunction
  5489.         0000h unconditional close
  5490.         nonzero: conditional close -- close only if concatenate flag is
  5491.           clear
  5492.     DX = index of printing device (00h=LPT1/PRN, 01h=LPT2, etc.)
  5493.     Return: AX = status (see #2507)
  5494.  0Ch    Print Get/Set Banner Name
  5495.     BL = subfunction
  5496.         00h set banner name
  5497.         DS:SI -> ASCIZ banner name (12 bytes, including NUL)
  5498.         01h get banner name
  5499.         ES:DI -> 12-byte buffer for banner name
  5500.     Return: AX = status (see #2507)
  5501.  
  5502. Format of PRINT.VLM statistics:
  5503. Offset    Size    Description    (Table 2532)
  5504.  00h    WOFD    size of statistics buffer (including this word)
  5505.  02h    DWORD    -> old INT 17 handler
  5506.  06h    WORD    number of physical printers reported by BIOS
  5507. SeeAlso: #2531
  5508.  
  5509. Format of PRINT.VLM standard print control information:
  5510. Offset    Size    Description    (Table 2533)
  5511.  00h    BYTE    PFStatus (reserved, 00h)
  5512.  01h    BYTE    print flags (default 80h)
  5513.         bit 2: release job for printing if capture interrupted
  5514.         bit 3: suppress form feed
  5515.         bit 4: notify
  5516.         bit 6: text file
  5517.         bit 7: print banner
  5518.  02h    BYTE    tab size (01h-12h, default 08h)
  5519.  03h    BYTE    number of copies (default 01h)
  5520.  04h    BYTE    ??? (may be number of copies instead of offset 03h)
  5521.  05h    BYTE    form type to be mounted in printer (default 00h)
  5522.  06h    BYTE    reserved (00h)
  5523.  07h 14 BYTEs    banner
  5524.  15h    BYTE    capture printer (LPT) number
  5525.  16h    WORD    capture timeout in seconds
  5526.  18h    BYTE    job concatenation flag (00h or 01h, default 00h)
  5527.  19h    BYTE    maximum lines per page (default 66)
  5528.  1Ah    BYTE    ??? (may be maximum lines instead of offset 19h)
  5529.  1Bh    BYTE    maximum characters per line (default 132)
  5530.  1Ch    BYTE    ??? (may be maximum characters instead of offset 1Ch)
  5531.  1Dh 13 BYTEs    name of form to be mounted in printer
  5532.  2Ah    BYTE    flag: capture active (00h or FFh, default 00h)
  5533.  2Bh    BYTE    flag: capturing to file (00h or 01h, default 00h)
  5534.  2Ch    BYTE    flag: timeout field is being decremented (default 00h)
  5535.  2Dh    DWORD    -> printer setup string
  5536.  31h    DWORD    -> printer reset string
  5537.  35h    BYTE    reserved (01h)
  5538. ---remainder is read-only---
  5539.  36h    BYTE    flag: job has started printing (00h or FFh, default 00h)
  5540.  37h    BYTE    flag: job placed in queue (00h or FFh, default 00h)
  5541.  38h    BYTE    flag: PJobValid (00h or FFh, default 00h)
  5542.         FFh if associated capture file is open for capturing data
  5543.  39h    DWORD    print-queue ID
  5544.  3Dh    WORD    print-job number (default 00h) (1-999)
  5545.  3Fh    BYTE    number of chars in INT 17h print cache buffer (default 00h)
  5546.  40h    BYTE    ???
  5547.  41h    WORD    high word of print-job number (default 00h)
  5548. SeeAlso: #2531,#2534
  5549.  
  5550. Format of PRINT.VLM extended print control information:
  5551. Offset    Size    Description    (Table 2534)
  5552.  00h    DWORD    NDS printer object ID or directory entry number (when capturing
  5553.           to a file)
  5554.  04h    BYTE    connection handle for server
  5555.  06h 48 BYTEs    ASCIZ print queue name on server
  5556.  36h    DWORD    ID of target server, or FFFFFFFFh if any server may be used
  5557.  3Ah  6 BYTEs    target print time, FFFFFFFFFFFFh for immediate printing
  5558.  40h    BYTE    status flags
  5559.  41h    BYTE    ???
  5560.  42h 13 BYTEs    client's banner name (overrides global banner if set)
  5561.  4Fh 13 BYTEs    job description
  5562.  5Ch  4 BYTEs    reserved (0)
  5563. SeeAlso: #2531,#2533
  5564.  
  5565. (Table 2535)
  5566. Call GENERAL.VLM (VLM ID 0043h) with:
  5567. Func    Description/Registers
  5568.  01h    Gen Get Version
  5569.     BX = function
  5570.         0000h get version
  5571.         Return: AX = status (see #2507)
  5572.             BX = major version of VLM supported (0001h)
  5573.             CX = minor version of VLM supported (0000h)
  5574.  03h    Gen Statistics
  5575.     CX = length of statistics buffer
  5576.     ES:DI -> buffer for statistics (see #2536)
  5577.     Return: AX = status (see #2507)
  5578.  04h    Gen Get/Set Primary
  5579.     BX = subfunction
  5580.         0001h get primary connection
  5581.         CX = primary connection handle to be retrieved
  5582.         Return: AX = status (see #2507)
  5583.             CX = primary connection handle
  5584.         0002h set primary connection
  5585.         CX = primary connection handle to be stored
  5586.         Return: AX = status (see #2507)
  5587.  06h    Gen Specific
  5588.     BX = subfunction
  5589.         0000h get command processor and master environment addresses
  5590.         Return: DX = segment of master environment
  5591.             ES:DI -> command processor's private COMSPEC= copy
  5592.         0001h get default or primary connection
  5593.         Return: AX = status (0000h successful)
  5594.             CX = connection handle if successful
  5595.         0002h last queue information
  5596.         AL = operation
  5597.             00h zap
  5598.             01h set
  5599.             02h get
  5600.         DI:DX = queue file handle
  5601.         CX = connection handle
  5602.         Return: AX = status (0000h successful)
  5603.             DI:DX = queue file handle
  5604.             CX = connection handle or 0000h if queue info invalid
  5605.         0003h get/set machine name(s)
  5606.         AX = name type
  5607.             00h get short machine name
  5608.             02h get long machine name
  5609.             04h set short machine name
  5610.             06h set long machine name
  5611.             08h get DOS name
  5612.             0Ah set DOS name
  5613.         ES:SI -> ASCIZ name if setting
  5614.         Return: AX = status (0000h if successful)
  5615.             ES:SI -> ASCIZ name if getting
  5616.         0004h set per-task EXEC search mode
  5617.         Return: AX = status (0000h if successful)
  5618.  09h    Gen Return Drive Info
  5619.     BX = subfunction
  5620.         0000h get first available drive
  5621.         Return: AX = status (see #2507)
  5622.             BX = drive letter of first drive
  5623.         0001h get Lastdrive
  5624.         Return: AX = status (see #2507)
  5625.             CH = number lastdrive 1=A: - 1Ah=Z:
  5626.  
  5627. Format of NetWare GENERAL.VLM statistics:
  5628. Offset    Size    Description    (Table 2536)
  5629.  00h    WORD    size of statistics record, including this word
  5630.  02h    DWORD    previous INT 21 vector
  5631. SeeAlso: #2535
  5632.  
  5633. (Table 2537)
  5634. Call NETX.VLM (VLM ID 0050h) with:
  5635. Func    Description/Registers
  5636.  01h    NetX Get Version
  5637.     BX = function
  5638.         0000h get version
  5639.         Return: AX = status (see #2507)
  5640.             BX = major version of VLM supported (0001h)
  5641.             CX = minor version of VLM supported (0000h)
  5642.  03h    NetX Statistics
  5643.     CX = length of statistics buffer
  5644.     ES:DI -> buffer for statistics (see #2538)
  5645.     Return: AX = status (see #2507)
  5646.  
  5647. Format of NETX.VLM statistics:
  5648. Offset    Size    Description    (Table 2538)
  5649.  00h    WORD    buffer size, including this word
  5650.  02h    DWORD    previous INT 21 handler
  5651. SeeAlso: #2537
  5652.  
  5653. (Table 2539)
  5654. Call SECURITY.VLM (VLM ID 0061h) with:
  5655. Func    Description/Registers
  5656.  01h    Security Get Version
  5657.     BX = function
  5658.         0000h get version
  5659.         Return: AX = status (see #2507)
  5660.             BX = major version of VLM supported (0001h)
  5661.             CX = minor version of VLM supported (0000h)
  5662.  03h    Security Statistics
  5663.  04h    ???
  5664.     AL = subfunction
  5665.         01h compute session key
  5666.         DS:SI -> 24-byte input buffer
  5667.         ES:DI -> 8-byte output buffer
  5668. --------N-2F7A20BX0001-----------------------
  5669. INT 2F - Novell NetWare - DOS Requester v1.03+ - GET VLM CallA ADDRESS
  5670.     AX = 7A20h
  5671.     BX = 0001h
  5672. Return: AX = 0000h if request was handled
  5673.         ES:BX -> CallA entry point (see #2540)
  5674. SeeAlso: AX=7A20h/BX=0000h
  5675.  
  5676. (Table 2540)
  5677. Call VLM CallA entry point with:
  5678.     AX = function
  5679.         0000h submit
  5680.         0001h cancel (not implemented)
  5681.     ES:DI -> Overlay Asynchronous Control Block structure (see #2541)
  5682. Return: DI, DS, ES preserved; all other registers may be destroyed
  5683.     interrupts disabled
  5684. Desc:    asychronously call the specified VLM and then return to caller, which
  5685.       might be another VLM
  5686.  
  5687. Format of Overlay Asynchronous Control Block (OACB):
  5688. Offset    Size    Description    (Table 2541)
  5689.  00h    DWORD    link to next OACB, 0000h:0000h if last (filled by VLM.EXE)
  5690.  04h    DWORD    callback address or 0000h:0000h
  5691.  08h    BYTE    InUse flag (00h if complete) (set by VLM.EXE)
  5692.  09h    BYTE    flag, reserved for VLM use
  5693.  0Ah    WORD    destination VLM
  5694.  0Ch    WORD    destination function
  5695.  0Eh    WORD    temporary storage for VLM.EXE
  5696.  10h  6 BYTEs    reserved
  5697.  16h  6 DWORDs    EAX,EBX,ECX,EDX,ESI,EDI
  5698.  2Eh  4 WORDs    DS,ES,FS,GS (FS and GS not used)
  5699. --------N-2F7A20BX0002-----------------------
  5700. INT 2F - Novell NetWare - DOS Requester v1.03+ - GET VLM MULTIPLEX ADDRESS
  5701.     AX = 7A20h
  5702.     BX = 0002h
  5703. Return: AX = 0000h
  5704.     ES:BX -> VLM multiplex entry point (see #2542)
  5705. Note:    for v1.10, this function is only available while VLM.EXE is loading
  5706.       the .VLM modules, because ES is destroyed on return
  5707. SeeAlso: AX=7A20h/BX=0000h,AX=7A20h/BX=0001h,AX=7A20h/BX=0003h
  5708.  
  5709. (Table 2542)
  5710. Call DOS Requester entry point with:
  5711.     BX = function???
  5712.         0000h
  5713.         DX = ???
  5714.         DI = ???
  5715.         BP = ???
  5716.         0002h
  5717.         CX = ???
  5718.         0003h
  5719.         DX = ???
  5720.         BP = ???
  5721.         0006h
  5722.         AH = subfunction???
  5723.         AL = ???
  5724.         STACK: variable (0, 4, 10, 14 bytes seen)
  5725. --------N-2F7A20BX0003-----------------------
  5726. INT 2F - Novell NetWare - DOS Requester v1.03+ - GET VLM PARSE API ADDRESS
  5727.     AX = 7A20h
  5728.     BX = 0003h
  5729. Return: AX = 0000h if request was handled
  5730.         ES:BX -> VLM parse API entry point
  5731. --------N-2F7A20BX0004-----------------------
  5732. INT 2F - Novell NetWare - DOS Requester v1.03+ - GET VLM MULTICAST CALLOUT
  5733.     AX = 7A20h
  5734.     BX = 0004h
  5735. Return: AX = 0000h if request was handled
  5736.         ES:BX -> VLM multicast data (see #2543)
  5737. SeeAlso: AX=7A20h/BX=0000h,AX=7A20h/BX=0002h,AX=7A20h/BX=0005h
  5738.  
  5739. Format of DOS Requester data:
  5740. Offset    Size    Description    (Table 2543)
  5741.  00h    DWORD    pointer to ??? (code)
  5742.  04h  4 BYTEs    ???
  5743.  08h    DWORD    pointer to ??? (code) (see #2544)
  5744.     ???
  5745.  
  5746. (Table 2544)
  5747. Call offset 08h function with:
  5748.     AL = function (00h-07h)
  5749.     ???
  5750. Return: ???
  5751. --------N-2F7A20BX0005-----------------------
  5752. INT 2F - Novell NetWare - DOS Requester v1.03+ - GET VLM INT 24 ADDRESS
  5753.     AX = 7A20h
  5754.     BX = 0005h
  5755. Return: AX = 0000h if request was handled
  5756.         ES:BX -> VLM INT 24 handler
  5757. SeeAlso: AX=7A20h/BX=0000h,AX=7A20h/BX=0002h,AX=7A20h/BX=0004h
  5758. --------N-2F7A20BX0006-----------------------
  5759. INT 2F - Novell NetWare - DOS Requester v1.03+ - GET ??? ENTRY POINT
  5760.     AX = 7A20h
  5761.     BX = 0006h
  5762. Return: AX = 0000h if request was handled
  5763.         ES:BX -> ??? entry point (RETF in v1.03 and v1.10)
  5764. --------N-2F7A20BX0007-----------------------
  5765. INT 2F - Novell NetWare - DOS Requester v1.03+ - GET ??? ENTRY POINT
  5766.     AX = 7A20h
  5767.     BX = 0007h
  5768. Return: AX = 0000h
  5769.     ES:BX -> ??? entry point (RETF in v1.03 and v1.10)
  5770. --------N-2F7A20BX0008-----------------------
  5771. INT 2F - Novell NetWare - DOS Requester v1.03+ - GET ??? ENTRY POINT
  5772.     AX = 7A20h
  5773.     BX = 0008h
  5774. Return: AX = 0000h
  5775.     ES:BX -> ??? entry point (RETF in v1.03 and v1.10)
  5776. --------N-2F7A20BX0080-----------------------
  5777. INT 2F - Novell NetWare - DOS Requester v1.03+ - GET ??? ENTRY POINT
  5778.     AX = 7A20h
  5779.     BX = 0080h
  5780. Return: AX = 0000h
  5781.     ES:BX -> ??? entry point (RETF in v1.03 and v1.10)
  5782. Note:    this function is identical to AX=7A20h/BX=0006h in v1.03 and v1.10
  5783. --------N-2F7A20BX0081-----------------------
  5784. INT 2F - Novell NetWare - DOS Requester v1.03+ - GET ??? ENTRY POINT
  5785.     AX = 7A20h
  5786.     BX = 0081h
  5787. Return: AX = 0000h
  5788.     ES:BX -> ??? entry point (RETF in v1.03 and v1.10)
  5789. Note:    this function is identical to AX=7A20h/BX=0007h in v1.03 and v1.10
  5790. --------N-2F7A20BX0082-----------------------
  5791. INT 2F - Novell NetWare - DOS Requester v1.03+ - GET ??? ENTRY POINT
  5792.     AX = 7A20h
  5793.     BX = 0082h
  5794. Return: AX = 0000h
  5795.     ES:BX -> ??? entry point (RETF in v1.03 and v1.10)
  5796. Note:    this function is identical to AX=7A20h/BX=0008h in v1.03 and v1.10
  5797. --------N-2F7A21-----------------------------
  5798. INT 2F C - Novell NetWare - DOS Requester - BROADCAST CALLBACK
  5799.     AX = 7A21h
  5800.     CX = server connection (FFFFh if message from Personal NetWare user)
  5801.     interrupts disabled
  5802. Return: CX = 0000h if broadcast handled
  5803.     interrupts disabled
  5804. Note:    this function is only linked into INT 2F when INT 21/AH=DEh/DL=05h
  5805.       has been issued
  5806. SeeAlso: AX=7A22h,AX=7A85h,INT 21/AH=DEh
  5807. --------N-2F7A22-----------------------------
  5808. INT 2F C - Novell NetWare - DOS Requester - BROADCAST/SFT3 INFORM
  5809.     AX = 7A22h
  5810.     DL = function
  5811.         21h ('!') broadcast waiting for workstation
  5812.         40h ('@') SFT3 server-change inform
  5813.     BX = transport type
  5814.         0021h IPX
  5815.         0022h TCP
  5816.     ES:SI -> transport-specific data block
  5817.         (ECB for IPX, undefined for TCP)
  5818.     interrupts disabled
  5819. Return: AX = 0000h if event handled, unchanged if not
  5820.     interrupts disabled
  5821. Note:    this callback is made from within a hardware interrupt handler; a
  5822.       separate call to AX=7A21h is made once the system is in a safe
  5823.       state for receiving the message
  5824. SeeAlso: AX=7A21h
  5825. --------N-2F7A2F-----------------------------
  5826. INT 2F - Novell NetWare - IPXODI v2.12 - GET GNMA SUPPORT
  5827.     AX = 7A2Fh
  5828. Return: AX = 0000h if supported and active
  5829.         BX = support level (0001h)
  5830.         ES:DI -> GNMA entry point (see #2545)
  5831. Program: GNMA is the Generic NetWare Management Agent
  5832. Note:    IPXODI v2.12 is distributed as part of the Personal NetWare system
  5833.       bundled with Novell DOS 7
  5834. SeeAlso: INT 7A/BX=001Fh
  5835.  
  5836. (Table 2545)
  5837. Call IPXODI GNMA entry point with:
  5838.     BX = function
  5839.         0000h Register Responder
  5840.         ES:SI -> responder structure (see #2546)
  5841.         Return: CF clear if successful
  5842.             CF set on error
  5843.             AX = status
  5844.                 FFFFh if specified responder is already registered
  5845.             interrupts enabled
  5846.             all other registers except DS, CS:IP, SS:SP destroyed
  5847.         Note:    the responder structure must not be deallocated until
  5848.               the responder is deregistered
  5849.         0001h Deregister Responder
  5850.         AX = type of responder to deregister
  5851.         Return: AX = status
  5852.                 FFFFh if specified responder not registered
  5853.             interrupts enabled
  5854.             ES:SI buffer from original registration may now be
  5855.                   freed
  5856.             all other registers except DS, CS:IP, SS:SP destroyed
  5857.         0002h Get Responders
  5858.         Return: ES:SI -> head of responder structure list (read-only)
  5859.             interrupts enabled
  5860.             all other registers except DS, CS:IP, SS:SP destroyed
  5861.         Note:    the returned list may change as tasks are swapped in
  5862.               and out
  5863.         0003h Send Acknowledgement
  5864.         AL = completion code
  5865.             00h successful
  5866.             01h-FCh responder-specific
  5867.             FDh invalid function
  5868.         CX = length of return data (0000h if none)
  5869.         DX:SI -> return data
  5870.         Return: interrupts enabled
  5871.             all other registers except DS, CS:IP, SS:SP destroyed
  5872.  
  5873. Format of NetWare GNMA responder structure:
  5874. Offset    Size    Description    (Table 2546)
  5875.  00h    DWORD    -> next responder structure (used by GNMA)
  5876.  04h    DWORD    -> responder's request handler (called by GNMA) (see #2547)
  5877.  08h    WORD    responder ID
  5878.  0Ah    WORD    number of functions supported by responder
  5879.  0Ch    DWORD    reserved for use by GNMA
  5880. SeeAlso: #2545
  5881.  
  5882. (Table 2547)
  5883. Values GNMA responder's request handler is called with:
  5884.     AL = function
  5885.         00h responder request
  5886.         CX = length of request data (not including header) (see #2548)
  5887.         DS:DI -> request data (see #2548)
  5888.         DS:BX -> 528-byte reply buffer
  5889.         ES:SI -> responder structure (see #2546) from registration
  5890.         DF clear
  5891.         interrupts disabled
  5892.         Return: AH = acknowledement status
  5893.                 00h acknowledgment being returned synchronously
  5894.                 nonzero: acknowledgment will be sent via GNMA
  5895.                   function 0003h (see #2545)
  5896.                 CX = length of acknowledement data
  5897.                 DX:BX -> acknowledgment (may use provided
  5898.                       buffer or another buffer)
  5899.             AL = completion code
  5900.                 00h successful
  5901.                 01h-FCh responder-specific
  5902.                 FDh invalid request
  5903.             DF clear
  5904.             interrupts disabled
  5905.             other registers may be destroyed
  5906.         01h responder acknowledgement complete
  5907.         ES:SI -> responder structure (see #2546) from registration
  5908.         DF clear
  5909.         interrupts disabled
  5910.         Return:    DF clear
  5911.             interrupts disabled
  5912.             all registers (except SS:SP) may be destroyed
  5913.         Note:    this function is called if function 00h returned a
  5914.               responder-provided data buffer; once this function
  5915.               is called, the responder may deallocate the buffer
  5916.         02h responder reset
  5917.         ES:SI -> responder structure (see #2546) from registration
  5918.         DF clear
  5919.         interrupts disabled
  5920.         Return:    DF clear
  5921.             interrupts disabled
  5922.             all registers (except SS:SP) may be destroyed
  5923.         Note:    called whenever a network managment application
  5924.               terminates
  5925. Note:    the responder handler should switch to a local stack if it enables
  5926.       interrupts or uses more than a few words of stack space
  5927. SeeAlso: #2546
  5928.  
  5929. Format of GNMA responder request data:
  5930. Offset    Size    Description    (Table 2548)
  5931.  00h    WORD    responder's assigned ID
  5932.  02h    WORD    function number (defined by responder)
  5933.  04h  N BYTEs    data for request (max 528 bytes; actual amount is determined
  5934.           by CX)
  5935. SeeAlso: #2547
  5936. --------N-2F7A2FBX0EDC-----------------------
  5937. INT 2F U - Personal NetWare - HRMIB - UNINSTALL
  5938.     AX = 7A2Fh
  5939.     BX = 0EDCh ('EDC' = Novell European Development Center)
  5940. Return: ???
  5941. SeeAlso: AX=7AA0h
  5942. --------N-2F7A40-----------------------------
  5943. INT 2F - Novell NetWare - TCP/IP Protocol Stack - INSTALLATION CHECK
  5944.     AX = 7A40h
  5945. Return: AX = 7AFFh if installed
  5946.         0000h:BX = address of interrupt vector for MLID ISR
  5947.         CX = version (CH=major, CL=minor)
  5948.         DX = 0000h
  5949.         ES:DI -> entry point for TCP/IP stack (see #2550)
  5950. Notes:    Novell's LAN Workplace for DOS TCPIP.EXE also supports this interface
  5951.     this function is also supported by the Beame&Whiteside BWLWP40 shim,
  5952.       but it only returns AL and ES:DI, and does not support AX=7A41h
  5953. SeeAlso: AX=7A41h,INT 15/AX=DE2Eh,INT 60"Excelan"
  5954.  
  5955.  
  5956. (Table 2549)
  5957. Values for NetWare TCP/IP function code:
  5958.  01h    "accept" accept a network connection request
  5959.  02h    "bind" associate an address with a socket
  5960.  03h    close socket
  5961.     Call:    socket number field set
  5962.  04h    "connect" connect to a remote host
  5963.  05h    "getmyipaddr" get IP address
  5964.     Call:    socket number field in sockaddr set to 0000h
  5965.  06h    "getmymacaddr" get hardware address
  5966.  07h    "getpeername"
  5967.  08h    "getsockname" get socket name
  5968.  09h    "getsockopt" get socket options
  5969.  0Ah    "getsubnetmask" get subnet mask
  5970.  0Bh    "ioctl"
  5971.  0Ch    "listen" wait for connection request on socket
  5972.  0Dh    "select"
  5973.     Return: socket bitmap updated (1=active)
  5974.  0Eh    "setmyipaddr" (obsolete) set IP address
  5975.  0Fh    "setsockopt" set socket options
  5976.  10h    "shutdown"
  5977.  11h    "socket" open socket
  5978.     Call:    socket number field set to 0000h
  5979.     Return: socket number set
  5980.  12h    "recv" get data from peer
  5981.  13h    "recvfrom" get data from specified remote host
  5982.     Call:    socket number set
  5983.         packet length and buffer descriptors set
  5984.     Return:    packet length and receive buffers updated
  5985.         sockaddr field set to source port number + IP address
  5986.  14h    "send" write data to socket
  5987.  15h    "sendto" write data to specified recipient
  5988.     Call:    socket number set
  5989.         flags at offset 18h = 0000h
  5990.         packet length and buffer descriptors set
  5991. ---v4.02+ ---
  5992.  16h    get BOOTP data
  5993.     Return: BOOTP data stored in parameter block (see #2553)
  5994.  17h    "getsnmpinfo"
  5995.  18h    "getpathinfo" get/set configuration???
  5996. ---v4.??? ---
  5997.  19h    "getifn"    get interface number
  5998.  1Ah    "setipinfo"    set IP information
  5999.  1Bh    "getipinfo"    get IP information
  6000.  1Ch    "setdnsinfo"    set DNS information
  6001.  1Dh    "getdnsinfo"    get DNS information
  6002.  1Eh    "setroutes"    set/modify route entry(ies)
  6003.  1Fh    "getroutes"    get route entry(ies)
  6004.  20h    "removeroutes"    remove route entry(ies)
  6005.  21h    "setarpe"    set/modify ARP entry(ies)
  6006.  22h    "getarpe"    get ARP entry(ies)
  6007.  23h    "removearpe"    remove ARP entry(ies)
  6008. Notes:    these functions are based on the Unix socket interface
  6009.     OR function number with 80h to call ESR
  6010. SeeAlso: #2551
  6011.  
  6012. (Table 2550)
  6013. Call NetWare TCP/IP entry point with:
  6014.     ES:SI -> parameter block (see #2551)
  6015. Return: ES:SI parameter block updated
  6016.     DX may be destroyed
  6017.  
  6018. Format of NetWare TCP/IP Request Control Block (RCB):
  6019. Offset    Size    Description    (Table 2551)
  6020.  00h    DWORD    -> next RCB
  6021.  04h    DWORD    -> previous RCB
  6022.  08h    DWORD    -> FAR post routine called if bit 7 of function code set
  6023.  0Ch    BYTE    flags (internal use)
  6024.         bit 0: request in progress
  6025.         bit 1: posted
  6026.         bit 2: Windows
  6027.         bit 3: "PROTBUF"
  6028.         bit 4: "ABORTRCB" for Ctrl-Break handling
  6029.         bit 5: call INT 21/AX=0B00h while blocking
  6030.  0Dh  7 BYTEs    ???
  6031.  14h    BYTE    (ret) temporary result code
  6032.  15h    BYTE    (call) function code (bit 7 set if non-blocking) (see #2549)
  6033.  16h    BYTE    socket number
  6034.  17h    BYTE    (ret) result or error code (see #2552)
  6035. ---accept/bind/connect/getmyipaddr/getpeername/getsockname commands---
  6036.  18h        sockaddr structure (WORD port + DWORD IP address)
  6037. ---close comand---
  6038.  no additional fields
  6039. ---getmymacaddr command---
  6040.  18h  6 BYTEs    low-level hardware network address
  6041. ---BOOTP command---
  6042.  18h 64 BYTEs    BOOTP VSA data (see #2553)
  6043. ---getpathinfo command
  6044.  18h  8 BYTEs    key
  6045.         "TCP_CFG" used by PING.EXE
  6046.  20h 128 BYTEs    path
  6047.  A0h    WORD    length of path in previous field
  6048. ---getsockopt/setsockopt commands---
  6049.  18h    WORD    option name
  6050.         0004h SO_REUSEADDR
  6051.         0008h SO_KEEPALIVE
  6052.         0080h SO_LINGER
  6053.  1Ah    WORD    option value
  6054.  1Ch    WORD    "linger"
  6055. ---getsubnetmask command---
  6056.  18h    DWORD    subnet mask
  6057. ---ioctl command---
  6058.  18h    DWORD    argument value
  6059.  1Ch    WORD    ioctl number
  6060. ---listen command---
  6061.  18h    WORD    maximum allowable connection backlog
  6062. ---select command---
  6063.  18h    WORD    number of sockets
  6064.  1Ah        fd_set readfds (bitmap of sockets)
  6065.         fd_set writefds
  6066.         fd_set expectionfds
  6067.     DWORD    timeout in clock ticks
  6068. ---shutdown command---
  6069.  18h    WORD    shutdown type
  6070. ---socket command---
  6071.  18h    WORD    protocol (1 = ICMP, 6 = TCP, 17 = UDP)
  6072. ---I/O commands (recv,recvfrom,send,sendto)---
  6073.  18h    WORD    flags
  6074.  1Ah  6 BYTEs    sockaddr from/to
  6075.         WORD    port number
  6076.         DWORD    IP address
  6077.  20h    WORD    length of packet sent/received
  6078.  22h    WORD    number of pointer/length pairs following (max 8)
  6079.  24h 6N BYTEs    buffer descriptors, each
  6080.         Offset    Size    Description
  6081.          00h    DWORD    pointer to buffer
  6082.          04h    WORD    length of buffer
  6083. ---getsnmpinfo command---
  6084.  18h    DWORD    (ret) -> ??? data in TCPIP code segment
  6085. --getifn command---
  6086.  18h    WORD    interface number
  6087.  1Ah    WORD    MLID instance number
  6088.  1Ch 128 BYTEs    MLID name
  6089. ---getipinfo/setipinfo commands---
  6090.  18h    WORD    interface number (00h = default)
  6091.  1Ah    DWORD    IP address
  6092.  1Eh    DWORD    IP netmask
  6093.  22h  3 DWORDs    router addresses (00000000h = unused entry)
  6094. ---getdnsinfo/setdnsinfo commands---
  6095.  18h    WORD    interface number (00h = default)
  6096.  1Ah  3 DWORDs    name server IP addresses (00000000h = unused entry)
  6097.  26h 128 BYTEs    domain name
  6098. ---getroutes/setroutes/removeroutes commands---
  6099.  18h    WORD    number of route entries to follow (max 5)
  6100.  1Ah 10N BYTEs    route entries
  6101.         DWORD    destination host/net IP address
  6102.         DWORD    IP address of first router
  6103.         WORD    route type
  6104. ---getarpe/setarpe/removearpe commands---
  6105.  18h    WORD    number of ARP entries to follow (max 16)
  6106.  1Ah 10N BYTEs    ARP entries
  6107.         DWORD    destination IP address
  6108.         6 BYTEs    destination hardware address
  6109. ---other commands---
  6110.  18h  4 WORDs    parameter words 0 to 3 (see #2549 for usage)
  6111.  
  6112. (Table 2552)
  6113. Values for NetWare TCP/IP status:
  6114.  00h    successful
  6115.  04h    would block
  6116.  09h    invalid socket
  6117.  23h    would block
  6118.  24h    operation in progress
  6119.  25h    already in progress
  6120.  26h    not a socket
  6121.  27h    destination address required
  6122.  28h    message too long
  6123.  29h    wrong protocol type for socket
  6124.  2Ah    protocol not available
  6125.  2Bh    protocol not supported
  6126.  2Ch    socket type not supported
  6127.  2Dh    operation not supported on socket
  6128.  2Eh    protocol family not supported
  6129.  2Fh    address family not supported by protocol family
  6130.  30h    address already in use
  6131.  31h    unable to assign requested address
  6132.  32h    network is down
  6133.  33h    network is unreachable
  6134.  34h    network dropped connection
  6135.  35h    software caused connection abort
  6136.  36h    connection reset by peer
  6137.  37h    no buffer space
  6138.  38h    socket is already connected
  6139.  39h    socket is not connected
  6140.  3Ah    socket is in shutdown mode
  6141.  3Bh    too many references
  6142.  3Ch    connection timed out
  6143.  3Dh    connection refused
  6144.  3Eh    too many levels of symbolic links
  6145.  3Fh    file name too long
  6146.  40h    host is down
  6147.  41h    host unreachable
  6148.  42h    protocol stack not installed
  6149.  43h    asynchronous operation not supported
  6150.  44h    synchronous operation not supported
  6151.  45h    no RCB available
  6152.  FFh    blocking (call has not yet returned)
  6153. SeeAlso: #2551
  6154.  
  6155. Format of BOOTP data (stored in parameter block):
  6156. Offset    Size    Description    (Table 2553)
  6157.  18h  4 BYTEs    ???
  6158.  1Ch    BYTE    ??? (01h)
  6159.  1Dh    BYTE    address length (04h)
  6160.  1Eh  4 BYTEs    subnet mask
  6161.  22h    BYTE    ??? (03h)
  6162.  23h    BYTE    ??? (04h)
  6163.  24h  4 BYTEs    IP address of nearest router
  6164.  28h    BYTE    ??? (06h)
  6165.  29h    BYTE    length of following data (08h)
  6166.  2Ah  4 BYTEs    IP address of nameserver 1
  6167.  2Eh  4 BYTEs    IP address of nameserver 2
  6168.  32h    BYTE    ??? (0Ch)
  6169.  33h    BYTE    length of local name
  6170.  34h  N BYTEs    local host name
  6171.     BYTE    FFh (end marker)
  6172. SeeAlso: #2551,#2549
  6173. --------N-2F7A41-----------------------------
  6174. INT 2F U - Novell NetWare - TCP/IP Protocol Stack - WINDOWS SUPPORT???
  6175.     AX = 7A41h
  6176.     ES:DI -> FAR entry point for ??? (will be called with BX=1,2,3,4)
  6177. Return: AX = 7AFFh if supported
  6178.         0000h:BX = address of interrupt vector for MLID ISR
  6179.         CX = version (CH=major, CL=minor)
  6180.         DX = 0000h
  6181.         ES:SI -> DWORD containing passed value of ES:DI
  6182.         ES:DI -> entry point for TCP/IP stack
  6183. Notes:    Novell's LAN Workplace for DOS TCPIP.EXE also supports this interface
  6184.     the pointer which is set to ES:DI is cleared to 0000h:0000h when
  6185.       a Windows exit broadcast is received
  6186. SeeAlso: AX=7A40h
  6187. --------N-2F7A42-----------------------------
  6188. INT 2F U - Novell NetWare - TCPIP.EXE v4.1 - GET ??? ENTRY POINT
  6189.     AX = 7A42h
  6190. Return: AX = 7AFFh if supported
  6191.         ES:DI -> ??? entry point (see #2554)
  6192.  
  6193. (Table 2554)
  6194. Call NetWare TCPIP.EXE entry point with:
  6195.     DX = ???
  6196.     ES:DI -> ??? (see #2555)
  6197. Return: AX = 0000h
  6198.     other registers destroyed
  6199.  
  6200. Format of data buffer:
  6201. Offset    Size    Description    (Table 2555)
  6202.  00h    WORD    offset of WORD ??? or 0000h
  6203.  02h    WORD    offset of DWORD ??? or 0000h
  6204.  04h    WORD    offset of DWORD ??? or 0000h
  6205. --------N-2F7A43-----------------------------
  6206. INT 2F U - Novell NetWare - TCPIP.EXE v4.1 - GET ???
  6207.     AX = 7A43h
  6208. Return: AX = 7AFFh if supported
  6209.         DX = offset of ???
  6210. SeeAlso: AX=7A44h
  6211. --------N-2F7A44-----------------------------
  6212. INT 2F U - Novell NetWare - TCPIP.EXE v4.1 - SET ???
  6213.     AX = 7A44h
  6214.     DX = offset of ??? (see AX=7A43h)
  6215. Return: AX = 7AFFh if supported
  6216. SeeAlso: AX=7A43h
  6217. --------N-2F7A4C-----------------------------
  6218. INT 2F U - Novell NetWare - TCPIP.EXE v4.1 - GET ???
  6219.     AX = 7A4Ch
  6220. Return: AX = 7AFFh if supported
  6221.         BX = ??? (0037h)
  6222.         CX = ??? (001Ch)
  6223. --------N-2F7A4DBX0001-----------------------
  6224. INT 2F U - Novell NetWare - ???
  6225.     AX = 7A4Dh
  6226.     BX = 0001h
  6227.     ES:DI -> ???
  6228. Return: AL = FFh if ???
  6229.         ES:DI -> ???
  6230. Note:    called by NETBIOS.EXE v3.01
  6231. --------N-2F7A4E-----------------------------
  6232. INT 2F U - Novell LAN Workplace for DOS - RARPD.EXE - INSTALLATION CHECK
  6233.     AX = 7A4Eh
  6234. Return: AX = 7AFFh if installed
  6235. SeeAlso: AX=7A4Fh"RARPD"
  6236. --------N-2F7A4F-----------------------------
  6237. INT 2F U - Novell LAN Workplace for DOS - RARPD.EXE - UNINSTALL
  6238.     AX = 7A4Fh
  6239. Return: AX = 7AFFh if installed
  6240.     DX,ES destroyed
  6241. Note:    this call conflicts with SNMP.EXE (both RARPD and SNMP are supplied
  6242.       with LAN Workplace for DOS!), such that running SNMP will uninstall
  6243.       RARPD as SNMP checks whether it is already installed!
  6244. SeeAlso: AX=7A4Eh"RARPD",AX=7A4Fh/BX=0001h
  6245. --------N-2F7A4FBX0001-----------------------
  6246. INT 2F U - Novell NetWare - SNMP.EXE - INSTALLATION CHECK
  6247.     AX = 7A4Fh
  6248.     BX = 0001h
  6249. Return: AX = 7AFFh if installed
  6250. Note:    this call conflicts with RARPD.EXE (both SNMP and RARPD are supplied
  6251.       with LAN Workplace for DOS!), such that running SNMP will uninstall
  6252.       RARPD as SNMP checks whether it is already installed!
  6253. SeeAlso: AX=7A4Fh"RARPD",AX=7A4Fh/BX=0002h
  6254. --------N-2F7A4FBX0002-----------------------
  6255. INT 2F U - Novell NetWare - SNMP.EXE - ???
  6256.     AX = 7A4Fh
  6257.     BX = 0002h
  6258. Return: AL = status
  6259.         4Fh if failed
  6260.         FFh if successful
  6261. SeeAlso: AX=7A4Fh/BX=0001h
  6262. --------N-2F7A80-----------------------------
  6263. INT 2F C - Novell NetWare - SHELL 3.01d BROADCAST - ABNORMAL EXIT
  6264.     AX = 7A80h
  6265. Return: nothing
  6266. Notes:    called on abnormal exit of the NetWare shell to notify other Novell
  6267.       TSRs that it is unsafe to call the shell in the future; also called
  6268.       by NETX.VLM when it is unloaded
  6269.     must be passed through so that all interested programs see the exit
  6270.     on receiving this call, IPXODI clears an internal pointer to a
  6271.       default value; Novell's NETBIOS.EXE clears its INT 21h pointer to
  6272.       0000h:0000h and stops calling it
  6273. SeeAlso: AX=7A81h
  6274. --------N-2F7A81-----------------------------
  6275. INT 2F C - Novell NetWare - SHELL 3.01d BROADCAST - SET SHELL INT 21 HANDLER
  6276.     AX = 7A81h
  6277.     CX:DX -> shell's INT 21h entry point
  6278. Return: nothing
  6279. Notes:    the shell calls this function as it loads to allow interested TSRs
  6280.       and drivers to make a local copy of the shell's entry point
  6281.     must be passed through so that all interested programs see it
  6282. --------N-2F7A85-----------------------------
  6283. INT 2F C - Novell NetWare - shell 3.01 - BROADCAST INFORM
  6284.     AX = 7A85h
  6285.     CX = broadcast server number
  6286. Return: CX = 0000h if broadcast message handled by another program
  6287.     CX unchanged if broadcast not handled
  6288. SeeAlso: AX=7A21h
  6289. --------N-2F7A90-----------------------------
  6290. INT 2F U - Novell NetWare - NETBIOS.EXE 3+ - INSTALLATION CHECK
  6291.     AX = 7A90h
  6292. Return: AL = 00h if present
  6293.         BX = ???
  6294.         CX = PSP segment of NETBIOS resident code
  6295. SeeAlso: AX=7AFEh
  6296. --------N-2F7AA0-----------------------------
  6297. INT 2F U - Personal NetWare - HRMIB - ???
  6298.     AX = 7AA0h
  6299.     BX = function
  6300.         0000h ???
  6301.         0001h ???
  6302. Return: ???
  6303. SeeAlso: AX=7A2Fh/BX=0EDCh
  6304. --------N-2F7AC1-----------------------------
  6305. INT 2F - LAN HiJack - LHR - DISABLE???
  6306.     AX = 7AC1h
  6307. Program: LAN HiJack is a NetWare utility by KDS Software which allows a user
  6308.       to take over control of a workstation remotely; LHR is the program
  6309.       run on the slave workstation
  6310. SeeAlso: AX=7AC8h,AX=7AC9h,AX=7ACFh
  6311. --------N-2F7AC2-----------------------------
  6312. INT 2F - LAN HiJack - LHR - SYNCHRONIZE SHIFT STATES???
  6313.     AX = 7AC2h
  6314. Note:    sets BIOS keyboard status byte to an internal variable
  6315. SeeAlso: AX=7AC3h,AX=7ACFh
  6316. --------N-2F7AC3-----------------------------
  6317. INT 2F - LAN HiJack - LHR - CLEAR ??? FLAG
  6318.     AX = 7AC3h
  6319. SeeAlso: AX=7AC2h,AX=7ACFh
  6320. --------N-2F7AC8-----------------------------
  6321. INT 2F - LAN HiJack - LHR - ENABLE FUNCTIONS
  6322.     AX = 7AC8h
  6323.     BL = function(s) to enable (see #2556)
  6324. SeeAlso: AX=7AC1h,AX=7AC9h,AX=7ACFh
  6325.  
  6326. Bitfields for LAN HiJack function(s) to enable/disable:
  6327. Bit(s)    Description    (Table 2556)
  6328.  0    ???
  6329.  1    remote keyboard enabled
  6330.  2    support remote's mouse
  6331.  3-7    unused
  6332. --------N-2F7AC9-----------------------------
  6333. INT 2F - LAN HiJack - LHR - DISABLE FUNCTIONS
  6334.     AX = 7AC9h
  6335.     BL = function(s) to disable (see #2556)
  6336. SeeAlso: AX=7AC1h,AX=7AC8h
  6337. --------N-2F7ACA-----------------------------
  6338. INT 2F - LAN HiJack - LHJ - ???
  6339.     AX = 7ACAh
  6340.     BL = ???
  6341. Return: ???
  6342. Program: LAN HiJack is a NetWare utility by KDS Software which allows a user
  6343.       to take over control of a workstation remotely; LHJ is the program
  6344.       run on the controlling workstation
  6345. --------N-2F7ACB-----------------------------
  6346. INT 2F - LAN HiJack - LHJ - ???
  6347.     AX = 7ACBh
  6348.     BX = ???
  6349. Return: ???
  6350. Note:    this function appears to be related to the keyboard
  6351. SeeAlso: AX=7ACCh
  6352. --------N-2F7ACC-----------------------------
  6353. INT 2F - LAN HiJack - LHJ - ???
  6354.     AX = 7ACCh
  6355.     BX = ???
  6356. Return: ???
  6357. Note:    this function appears to be related to the mouse
  6358. SeeAlso: AX=7ACBh
  6359. --------N-2F7ACFBX0000-----------------------
  6360. INT 2F - LAN HiJack - LHR - INSTALLATION CHECK
  6361.     AX = 7ACFh
  6362.     BX = 0000h
  6363. Return: BX = segment of resident code if installed
  6364. Program: LAN HiJack is a NetWare utility by KDS Software which allows a user
  6365.       to take over control of a workstation remotely; LHR is the program
  6366.       run on the slave workstation
  6367. --------N-2F7AF0-----------------------------
  6368. INT 2F - Novell NetWare - DOSNP.EXE v1.30G - INSTALLATION CHECK
  6369.     AX = 7AF0h
  6370. Return: AL = FFh if present
  6371.         ES = 7AF0h
  6372.         CX = PSP segment of resident code
  6373. --------N-2F7AF1-----------------------------
  6374. INT 2F - Novell NetWare - Access Server Driver - INSTALLATION CHECK
  6375.     AX = 7AF1h
  6376.     BL = sequence number (01h first driver, 02h second, 00h no driver)
  6377. Return: AX <> 7AF1h if present
  6378.         BH = total number of drivers
  6379.         ---if BL nonzero on entry---
  6380.         AL = number of ports provided by specified driver
  6381.         ES:DI -> driver entry point
  6382.               (see #2557,#2558,#2559,#2560,#2561,#2562,#2563,#2564)
  6383.         ES:DX -> ID string
  6384. SeeAlso: INT 7A/BX=001Ch
  6385.  
  6386. (Table 2557)
  6387. Call Access Server driver "initialize port" function with:
  6388.     AH = 01h
  6389.     AL = port number (00h-0Fh)
  6390.     ES:BX -> configuration parameter block (see #2570)
  6391.     interrupts disabled
  6392. Return: CF clear if successful
  6393.     CF set on error
  6394. SeeAlso: #2558
  6395.  
  6396. (Table 2558)
  6397. Call Access Server driver "get port status" function with:
  6398.     AH = 02h
  6399.     AL = port number (00h-0Fh)
  6400.     interrupts disabled
  6401. Return: CF clear if successful
  6402.         BL = transmitter status (see #2567)
  6403.         BH = receiver status (see #2568)
  6404.         DL = external status signals (see #2569)
  6405.     CF set on error
  6406.     interrupts disabled
  6407. SeeAlso: #2557,#2559,#2562
  6408.  
  6409. (Table 2559)
  6410. Call Access Server driver "get input from port" function with:
  6411.     AH = 03h
  6412.     AL = port number (00h-0Fh)
  6413.     CX = size of data buffer
  6414.     ES:BX -> buffer for data
  6415.     interrupts disabled
  6416. Return: CF clear if successful
  6417.     CF set on error
  6418.     interrupts disabled
  6419.     CX = number of bytes read
  6420. Note:    the driver will add a NUL to the buffer when a break signal is detected
  6421. SeeAlso: #2559,#2560
  6422.  
  6423. (Table 2560)
  6424. Call driver "send output data to port" function with:
  6425.     AH = 04h
  6426.     AL = port number (00h-0Fh)
  6427.     CX = number of bytes to send
  6428.     ES:BX -> buffer containing data
  6429.     interrupts disabled
  6430. Return: CF clear if successful
  6431.     CF set on error
  6432.     interrupts disabled
  6433.     CX = number of bytes actually written
  6434. SeeAlso: #2559,#2561
  6435.  
  6436. (Table 2561)
  6437. Call driver "get I/O character counts" function with:
  6438.     AH = 05h
  6439.     AL = port number (00h-0Fh)
  6440.     interrupts disabled
  6441. Return: CF clear if successful
  6442.         BX = number of bytes pending transmission
  6443.         CX = number of bytes available for reading
  6444.     CF set on error
  6445.     interrupts disabled
  6446. SeeAlso: #2559,#2560
  6447.  
  6448. (Table 2562)
  6449. Call driver "control XON/XOFF" function with:
  6450.     AH = 06h
  6451.     AL = port number (00h-0Fh)
  6452.     DL = new state
  6453.         (00h software flow control disabled, else enabled)
  6454.     interrupts disabled
  6455. Return: CF clear if successful
  6456.     CF set on error
  6457.     interrupts disabled
  6458. SeeAlso: #2563
  6459.  
  6460. (Table 2563)
  6461. Call driver "get error counts and statistics" function with:
  6462.     AH = 07h
  6463.     AL = port number (00h-0Fh)
  6464.     ES:BX -> buffer for statistics (see #2571)
  6465.     interrupts disabled
  6466. Return: CF clear if successful
  6467.         ES:BX buffer filled
  6468.     CF set on error
  6469.     interrupts disabled
  6470. SeeAlso: #2564,#2565,#2566
  6471.  
  6472. (Table 2564)
  6473. Call driver "general request" function with:
  6474.     AH = 08h
  6475.     AL = port number (00h-0Fh)
  6476.     DX = requested operations
  6477.         bit 0: flush transmit buffers
  6478.         bit 1: flush receive buffers
  6479.         bit 4: define XON/XOFF characters
  6480.     ES:BX -> XON/XOFF characters (see #2572) if DX bit 4 set
  6481.     interrupts disabled
  6482. Return: CF clear if successful
  6483.     CF set on error
  6484.     interrupts disabled
  6485.  
  6486. (Table 2565)
  6487. Call driver "deadman timer management" function with:
  6488.     AH = 09h
  6489.     AL = port number (00h-0Fh)
  6490.     BX = next time interval in seconds (0000h to disable timer)
  6491.     interrupts disabled
  6492. Return: CF clear
  6493.     interrupts disabled
  6494. SeeAlso: #2566
  6495.  
  6496. (Table 2566)
  6497. Call driver "get buffer sizes" function with:
  6498.     AH = 0Ah
  6499.     AL = port number (00h-0Fh)
  6500.     interrupts disabled
  6501. Return: CF clear if successful
  6502.        BX = size of transmit buffer
  6503.        CX = size of receive buffer
  6504.     CF set on error
  6505.     interrupts disabled
  6506. SeeAlso: #2565
  6507.  
  6508. (Table 2567)
  6509. Values for Access Server transmitter status:
  6510.  00h    uninitialized
  6511.  01h    ready, not transmitting
  6512.  02h    transmitting
  6513.  03h    XOFF received
  6514.  04h    transmitting, buffer full
  6515.  05h    XOFF received and buffer full
  6516.  
  6517. (Table 2568)
  6518. Values for Access Server receiver status:
  6519.  00h    uninitialized
  6520.  01h    ready
  6521.  02h    receive buffer full, data may have been lost
  6522.  
  6523. Bitfields for external status signals:
  6524. Bit(s)    Description    (Table 2569)
  6525.  7,6    undefined
  6526.  5    CTS active
  6527.  4    DSR active
  6528.  3    DCD active
  6529.  2,1    undefined
  6530.  0    ring indicator
  6531.  
  6532. Format of Access Server configuration parameter block:
  6533. Offset    Size    Description    (Table 2570)
  6534.  00h    BYTE    receive baud rate index
  6535.         00h 50 bps, 01h 75 bps, 02h 110 bps, 03h 134.5 bps,
  6536.         04h 150 bps, 05h 300 bps, 06h 600 bps, 07h 1200 bps,
  6537.         08h 1800 bps, 09h 2000 bps, 0Ah 2400 bps, 0Bh 3600 bps,
  6538.         0Ch 4800 bps, 0Dh 7200 bps, 0Eh 9600 bps, 0Fh 19200 bps,
  6539.         10h 38400 bps, 11h 57600 bps, 12h 115200 bps
  6540.  01h    BYTE    receive bits per character (0=5 bits..3=8 bits)
  6541.  02h    BYTE    receive stop bits
  6542.  03h    BYTE    receive parity
  6543.         00h none, 01h odd, 02h even, 03h mark, 04h space
  6544.  04h    BYTE    transmit baud rate index (same as receive baud rate)
  6545.  05h    BYTE    transmit bits per character (0=5 bits..3=8 bits)
  6546.  06h    BYTE    transmit stop bits
  6547.  07h    BYTE    transmit parity (same as receive parity)
  6548.  08h    BYTE    DTR state (00h off, 01h on)
  6549.  09h    BYTE    RTS state (00h off, 01h on)
  6550.  0Ah    BYTE    flow control (00h none, 01h XON/XOFF, 02h RTS/CTS, 03h both)
  6551.  0Bh    BYTE    break control (00h off, 01h on)
  6552.  
  6553. Format of Access Server statistics:
  6554. Offset    Size    Description    (Table 2571)
  6555.  00h    BYTE    port number
  6556.  01h    BYTE    external status signals (see #2569)
  6557.  02h    BYTE    transmitter status (see #2567)
  6558.  03h    BYTE    receiver status (see #2568)
  6559.  04h    DWORD    number of characters received
  6560.  08h    DWORD    number of characters transmitted
  6561.  0Ch    WORD    input parity errors
  6562.  0Eh    WORD    input framing errors
  6563.  10h    WORD    lost characters due to hardware overrun
  6564.  12h    WORD    lost characters due to data buffer overrun
  6565. Note:    the counts are not allowed to wrap around; once a count reaches FFFFh
  6566.       or FFFFFFFFh, it is no longer incremented
  6567.  
  6568. Format of Access Server XON/XOFF characters:
  6569. Offset    Size    Description    (Table 2572)
  6570.  00h    BYTE    04h (number of bytes following)
  6571.  01h    BYTE    transmit XON character
  6572.  02h    BYTE    transmit XOFF character
  6573.  03h    BYTE    receive XON character
  6574.  04h    BYTE    receive XOFF character
  6575. --------N-2F7AFE-----------------------------
  6576. INT 2F U - Novell NetWare - DOSNP.EXE - INSTALLATION CHECK
  6577.     AX = 7AFEh
  6578. Return: AL = FFh if present
  6579.         ES = (data???) segment of DOSNP
  6580. Program: DOSNP.EXE provides "named pipes" support for DOS workstations running
  6581.        NetWare
  6582. Note:    the NetWare shell calls this function and refuses to load if DOSNP is
  6583.       present
  6584. SeeAlso: AX=7A90h
  6585. --------N-2F7AFFBX0000-----------------------
  6586. INT 2F - Novell NetWare - TBMI v1.1+ - INSTALLATION CHECK / Windows SUPPORT
  6587.     AX = 7AFFh
  6588.     BX = 0000h
  6589.     CX = 4E65h ("Ne")
  6590.     DX = 7457h ("tW")
  6591.     ES:DI -> Windows support procedure (see #2573)
  6592. Return: AL = FFh if installed
  6593.         CX = configured sockets (14h)
  6594.         DS:SI -> data table ???
  6595.         ES:DI -> IPX far call handler
  6596. Notes:    for IPX/SPX this call reportedly returns DS:SI pointing to the table
  6597.       of pointers to service events queue head and tail
  6598.     this function is also supported by IPXODI; v2.12 does not change DS,
  6599.       but does set SI to an internal address
  6600. SeeAlso: AX=7AFFh/BX=0001h
  6601.  
  6602. (Table 2573)
  6603. Values Windows support procedure called with:
  6604.     BP = function
  6605.         0001h Get ECB
  6606.         BX = socket number
  6607.         Return: ES:SI -> ECB or 0000h:0000h if none available
  6608.         0002h Count Listen ECBs
  6609.         AX = BX = socket
  6610.         Return: CX = number of listen ECBs for socket
  6611.                 (must be >= 2 for SPX to work)
  6612.         0003h ???
  6613.         0004h Inform task switcher of ECB locations
  6614.         Note:    registers other than those listed above are equal
  6615.               to the values when IPX was called
  6616. Note:    the support function will not be called if IPX is called with BX
  6617.       bit 15 set
  6618. --------N-2F7AFFBX0001-----------------------
  6619. INT 2F - Novell NetWare - TBMI v1.1+, shell v3.01d - INSTALLATION CHECK???
  6620.     AX = 7AFFh
  6621.     BX = 0001h
  6622.     CX = 4E65h ("Ne")
  6623.     DX = 7457h ("tW")
  6624. Return: AL = FFh if installed
  6625.         CX = ???  (8000h)
  6626.         SI = ??? (or -> ???) (0002h and 0007h seen)
  6627.         ES:DI -> IPX far call handler
  6628.         ES:DX -> 6-byte data area ???
  6629. Note:    this function is also supported by IPXODI, but IPXODI v2.12 does not
  6630.       return ES:DX
  6631. SeeAlso: AX=7AFFh/BX=0000h
  6632. --------d-2F7F00-----------------------------
  6633. INT 2F - Jim Harper's CD-ROM redirector SCSI driver - INSTALLATION CHECK
  6634.     AX = 7F00h
  6635. Return: AL = FFh if installed
  6636. SeeAlso: AX=7F01h"Harper",AX=7F02h"Harper",AX=7F03h"Harper"
  6637. --------P-2F7F00-----------------------------
  6638. INT 2F - PRINDIR v9.0 - INSTALLATION CHECK
  6639.     AX = 7F00h
  6640. Return: AL = FFh if installed
  6641.         BX = version (BH = major, BL = minor)
  6642.         CX:DX -> ASCIZ signature "PRINDIR"
  6643. Range:    AH=7Fh is the default, may be changed at installation time
  6644. Note:    prior versions of PRINDIR used INT 7C or INT 7A
  6645. SeeAlso: AX=7F01h"PRINDIR",AX=7F02h"PRINDIR",AX=7F03h"PRINDIR"
  6646. SeeAlso: AX=7F06h"PRINDIR",AX=7F08h,AX=7F0Ah,AX=7F0Ch,AX=7F0Eh,INT 7C"PRINDIR"
  6647. --------d-2F7F01-----------------------------
  6648. INT 2F - Jim Harper's CD-ROM redirector SCSI driver - DO COMMAND
  6649.     AX = 7F01h
  6650.     DS:DX -> command record (see #2574)
  6651. Return: AL = status
  6652.         00h successful
  6653.         else error code
  6654. SeeAlso: AX=7F00h"Harper",AX=7F02h"Harper",INT 11/AH=FFh"SDLP"
  6655. SeeAlso: INT 21/AX=4402h"ASPI",INT 4F/AX=8100h
  6656.  
  6657. Format of CD-ROM redirector command record:
  6658. Offset    Size    Description    (Table 2574)
  6659.  00h    BYTE    ID
  6660.  01h 10 BYTEs    CDB (Command Descriptor Block) for operation (see #2868,#2869)
  6661.  0Bh    WORD    segment of buffer
  6662.  0Dh    WORD    offset of buffer
  6663.  0Fh    BYTE    status
  6664.  10h    BYTE    sense
  6665.  12h    WORD    count
  6666. --------P-2F7F01-----------------------------
  6667. INT 2F - PRINDIR v9.0 - SET CAPTURE DEVICE
  6668.     AX = 7F01h
  6669.     DX = capture device (as used by /GET commandline option)
  6670. Return: AX = status
  6671.         0000h successful
  6672.         FFFFh invalid device
  6673. SeeAlso: AX=7F00h"PRINDIR",AX=7F02h"PRINDIR",AX=7F03h"PRINDIR"
  6674. SeeAlso: AX=7F05h"PRINDIR"
  6675. --------d-2F7F02-----------------------------
  6676. INT 2F - Jim Harper's CD-ROM redirector SCSI driver - DO RESET
  6677.     AX = 7F02h
  6678. SeeAlso: AX=7F00h,AX=7F01h
  6679. --------P-2F7F02-----------------------------
  6680. INT 2F - PRINDIR v9.0 - SET DESTINATION DEVICE
  6681.     AX = 7F02h
  6682.     DX = destination device number (as used by /PUT commandline option)
  6683. Return: AX = status
  6684.         0000h successful
  6685.         FFFFh invalid device number
  6686. SeeAlso: AX=7F00h"PRINDIR",AX=7F01h"PRINDIR",AX=7F04h"PRINDIR"
  6687. SeeAlso: AX=7F06h"PRINDIR"
  6688. --------d-2F7F03-----------------------------
  6689. INT 2F - Jim Harper's CD-ROM redirector SCSI driver - UNINSTALL
  6690.     AX = 7F03h
  6691. Return: AL = status
  6692.         00h successful
  6693.         01h unable to uninstall
  6694. SeeAlso: AX=7F00h
  6695. --------P-2F7F03-----------------------------
  6696. INT 2F - PRINDIR v9.0 - SET CAPTURE FILENAME
  6697.     AX = 7F03h
  6698.     CX:DX -> ASCIZ name of capture file
  6699. Return: AX = status
  6700.         0000h successful
  6701.         FFFFh name too long
  6702. SeeAlso: AX=7F00h"PRINDIR",AX=7F01h"PRINDIR",AX=7F04h"PRINDIR"
  6703. SeeAlso: AX=7F05h"PRINDIR",AX=7F07h"PRINDIR"
  6704. --------P-2F7F04-----------------------------
  6705. INT 2F - PRINDIR v9.0 - SET LOCK FILENAME
  6706.     AX = 7F04h
  6707.     CX:DX -> ASCIZ name of lock file
  6708. Return: AX = status
  6709.         0000h successful
  6710.         FFFFh invalid device number
  6711. SeeAlso: AX=7F00h"PRINDIR",AX=7F01h"PRINDIR",AX=7F03h"PRINDIR"
  6712. SeeAlso: AX=7F05h,AX=7F06h,AX=7F08h,AX=7F0Ah,AX=7F0Bh
  6713. --------P-2F7F05-----------------------------
  6714. INT 2F - PRINDIR v9.0 - DUMP CAPTURE BUFFER
  6715.     AX = 7F05h
  6716. Return: AX = status
  6717.         0000h successful
  6718. SeeAlso: AX=7F00h"PRINDIR",AX=7F01h"PRINDIR",AX=7F04h"PRINDIR",AX=7F06h
  6719. --------P-2F7F06-----------------------------
  6720. INT 2F - PRINDIR v9.0 - SET NORMAL TEXT COLOR
  6721.     AX = 7F06h
  6722.     DH = new attribute for normal text
  6723. Return: AX = status
  6724.         0000h successful
  6725. SeeAlso: AX=7F00h"PRINDIR",AX=7F01h"PRINDIR",AX=7F05h"PRINDIR",AX=7F07h
  6726. --------P-2F7F07-----------------------------
  6727. INT 2F - PRINDIR v9.0 - SET HIGHLIGHT TEXT COLOR
  6728.     AX = 7F07h
  6729.     DH = new attribute for highlighted text
  6730. Return: AX = status
  6731.         0000h successful
  6732. SeeAlso: AX=7F00h"PRINDIR",AX=7F01h"PRINDIR",AX=7F06h"PRINDIR",AX=7F08h
  6733. --------P-2F7F08-----------------------------
  6734. INT 2F - PRINDIR v9.0 - SET POPUP HOTKEY
  6735.     AX = 7F08h
  6736.     DH = new scancode for hotkey
  6737. Return: AX = status
  6738.         0000h successful
  6739. SeeAlso: AX=7F00h"PRINDIR",AX=7F05h"PRINDIR",AX=7F09h,AX=7F0Bh,AX=7F0Dh
  6740. --------P-2F7F09-----------------------------
  6741. INT 2F - PRINDIR v9.0 - SET BYTE COUNTER DISPLAY
  6742.     AX = 7F09h
  6743.     DH = new state (00h off, 01h on)
  6744. Return: AX = status
  6745.         0000h successful
  6746. SeeAlso: AX=7F00h"PRINDIR",AX=7F07h"PRINDIR",AX=7F08h,AX=7F0Ah,AX=7F0Ch
  6747. --------P-2F7F0A-----------------------------
  6748. INT 2F - PRINDIR v9.0 - SET FLUSH DELAY
  6749.     AX = 7F0Ah
  6750.     DX = number of clock ticks before flushing
  6751. Return: AX = status
  6752.         0000h successful
  6753. SeeAlso: AX=7F00h"PRINDIR",AX=7F07h"PRINDIR",AX=7F09h,AX=7F0Bh,AX=7F0Ch
  6754. --------P-2F7F0B-----------------------------
  6755. INT 2F - PRINDIR v9.0 - SET MINIMUM DUMP SIZE
  6756.     AX = 7F0Bh
  6757.     DX = number of kilobytes to accumulate before dumping
  6758. Return: AX = status
  6759.         0000h successful
  6760. SeeAlso: AX=7F00h"PRINDIR",AX=7F0Ah,AX=7F0Ch,AX=7F0Dh,AX=7F0Eh
  6761. --------P-2F7F0C-----------------------------
  6762. INT 2F - PRINDIR v9.0 - SET ECHO STATE
  6763.     AX = 7F0Ch
  6764.     DX = new state (00h echo off, 01h echo on)
  6765. Return: AX = status
  6766.         0000h successful
  6767. SeeAlso: AX=7F00h"PRINDIR",AX=7F0Ah,AX=7F0Bh,AX=7F0Dh,AX=7F0Eh
  6768. --------P-2F7F0D-----------------------------
  6769. INT 2F - PRINDIR v9.0 - SHOW POPUP PARAMETER MENU
  6770.     AX = 7F0Dh
  6771. Return: AX = status
  6772.         0000h successful
  6773.         else  failed
  6774. SeeAlso: AX=7F00h"PRINDIR",AX=7F0Ah,AX=7F0Bh,AX=7F0Ch,AX=7F0Eh
  6775. --------P-2F7F0E-----------------------------
  6776. INT 2F - PRINDIR v9.0 - SUBMIT BYTE TO CURRENT DESTINATION DEVICE
  6777.     AX = 7F0Eh
  6778.     DL = byte to send to destination device
  6779. Return: AX = status
  6780.         0000h successful
  6781.         else  failed
  6782. SeeAlso: AX=7F00h"PRINDIR",AX=7F0Ah,AX=7F0Bh,AX=7F0Ch,AX=7F0Dh
  6783. ----------2F7F24-----------------------------
  6784. INT 2F - Multiplex - ???
  6785.     AX = 7F24h
  6786.     ???
  6787. Return: ???
  6788. Note:    called by PC/370, an IBM 370 emulator by Donald S. Higgins
  6789. ----------2F7F26-----------------------------
  6790. INT 2F - Multiplex - ???
  6791.     AX = 7F26h
  6792.     ???
  6793. Return: ???
  6794. Note:    called by PC/370, an IBM 370 emulator by Donald S. Higgins
  6795. --------N-2F8000-----------------------------
  6796. INT 2F - EASY-NET - INSTALLATION CHECK
  6797.     AX = 8000h
  6798. Return: AL = 00h not installed
  6799.          FFh installed
  6800. Program: EASY-NET is a shareware two-machine serial-port network
  6801. --------N-2F8000-----------------------------
  6802. INT 2F - Nanosoft, Inc. TurboNET server - INSTALLATION CHECK
  6803.     AX = 8000h
  6804. Return: AL = FFh if installed
  6805.         BX = CS of resident code
  6806.         CX = ??? (03FCh)
  6807. Program: TurboNET is a NetBIOS-based file redirector and server; a
  6808.       demonstration version may be downloaded from Nanosoft's BBS
  6809. SeeAlso: AX=8100h
  6810. --------t-2F8000-----------------------------
  6811. INT 2F - CS_TSR specification - TSR INSTALLATION CHECK
  6812.     AX = 8000h
  6813.     DS:SI -> 4-byte CS_TSR signature (11h 43h 53h 10h)
  6814. Return: AL = status
  6815.         00h no CS_TSR-compliant TSRs installed
  6816.         01h installed, but signature did not match
  6817.         FFh installed, signature matches
  6818.         ES:DI -> resident process block (see #2575) of last installed
  6819.               TSR (if DS:SI pointed at signature on entry)
  6820. Program: the CS_TSR specification is a standardized TSR interface by Compact
  6821.       Soft group in Kiev, Ukraine
  6822. Desc:    determine whether any CS_TSR-compliant TSRs are installed on the
  6823.       selected multiplex number
  6824. Range:    AH=80h to AH=FFh
  6825. SeeAlso: AX=8001h"CS_TSR",AX=8002h"CS_TSR",AX=8003h"CS_TSR"
  6826.  
  6827. Format of CS_TSR process block:
  6828. Offset    Size    Description    (Table 2575)
  6829.  00h  4 BYTEs    CS_TSR signature 11h 43h 53h 10h
  6830.  04h    BYTE    INT 2F multiplex number
  6831.  05h    WORD    virtual process handle (unique among loaded TSRs)
  6832.  07h  2 BYTEs    version (binary minor version, then major version)
  6833.  09h    WORD    PSP segment of TSR
  6834.  0Bh    DWORD    pointer to ASCIZ program name
  6835.  0Fh  3 BYTEs    program creation date (day, month, year)
  6836.  12h  3 BYTEs    process start time (seconds, minutes, hours)
  6837.  15h  3 BYTEs    process start date (day, month, year)
  6838. --------F-2F8000DX0000-----------------------
  6839. INT 2F - FaxBIOS interface - INSTALLATION CHECK
  6840.     AX = 8000h
  6841.     DX = 0000h
  6842.     DI = 0000h
  6843. Return: AL = FFh if installed
  6844.     DX:DI -> signature "FaxBiosjpc"
  6845. Range:    AH=80h to AH=FFh, selected by scanning multiplex numbers for signature
  6846. SeeAlso: AH=2Ah,AX=80FBh
  6847. --------N-2F8001-----------------------------
  6848. INT 2F - Nanosoft, Inc. TurboNET server - ???
  6849.     AX = 8001h
  6850.     DS:SI -> 16-byte buffer for ???
  6851. Return: AH = status
  6852.         00h successful
  6853.         01h error (TurboNET busy)
  6854. Note:    makes NetBIOS calls
  6855. --------t-2F8001-----------------------------
  6856. INT 2F - CS_TSR specification - GET HANDLE (TSR-SPECIFIC INSTALLATION CHECK)
  6857.     AX = 8001h
  6858.     DS:SI -> ASCIZ signature string for desired TSR (see #2576)
  6859. Return: BX = process handle or 0000h if specified TSR not installed
  6860.     ES:DI -> process block for TSR (see #2575) if BX<>0000h
  6861. Note:    A widely-available copy of ASCII billing itself as "ASCII 2.OO by
  6862.       Nick Zaikin Jr." is in fact a hacked copy of the Compact Soft
  6863.       ASCII v4.23 which is identical except for the changed attribution
  6864.       and version (in fact, some instances of "4.23" were missed); the
  6865.       hacked copy requires the signature string
  6866.       "ASCII 2.OO by Nick Zaikin Jr." instead of the unhacked version's
  6867.       simple signature "ASCII"
  6868. SeeAlso: AX=8000h"CS_TSR",AX=8002h"CS_TSR"
  6869.  
  6870. (Table 2576)
  6871. Values for CS_TSR signature strings:
  6872.  "ASCII"    ASCII, a popup ASCII table with character input
  6873.  "Halculator"    HALC, a 32-bit RPN WYSIWIH calculator with undo and ptr support
  6874.  "AntiTurbo"    AT!, an intelligent system slow-down utility
  6875. --------t-2F8002-----------------------------
  6876. INT 2F - CS_TSR specification - GET PROCESS BLOCK BY PROCESS HANDLE
  6877.     AX = 8002h
  6878.     BX = process handle for TSR (see AX=8001h"CS_TSR")
  6879. Return: ES:DI -> process block for specified TSR (see #2575)
  6880.         unchanged if no match for process handle
  6881. Note:    This function is used to allocate a process handle when the TSR
  6882.       installs itself, by setting ES:DI to point at something other than
  6883.       a CS_TSR process block's signature string and iterating through the
  6884.       possible process handles (0001h to FFFFh) until ES:DI is returned
  6885.       unchanged
  6886. SeeAlso: AX=8000h"CS_TSR",AX=8001h"CS_TSR",AX=8003h"CS_TSR"
  6887. --------t-2F8003-----------------------------
  6888. INT 2F - CS_TSR specification - CUSTOM SUBFUNCTION
  6889.     AX = 8003h
  6890.     BX = process handle for TSR (see AX=8001h"CS_TSR")
  6891.     other registers vary by TSR
  6892. Return: vary by TSR, unchanged if not supported
  6893. Program: the CS_TSR specification is a standardized TSR interface by Compact
  6894.       Soft group in Kiev, Ukraine
  6895. SeeAlso: AX=8000h"CS_TSR",AX=8001h"CS_TSR",AX=8002h"CS_TSR"
  6896. --------F-2F80FB-----------------------------
  6897. INT 2F - FaxBIOS interface - COMMAND SUBMISSION
  6898.     AX = 80FBh
  6899.     BX = function number (see #2577)
  6900.     DX:DI -> command buffer
  6901.           (see #2579,#2582,#2583,#2584,#2585,#2586,#2591,#2597,#2604)
  6902. Return: AL = FFh if submitted OK
  6903.     CX = result code (see #2578)
  6904. Range:    AH=80h to AH=FFh, selected by scanning multiplex numbers for signature
  6905. SeeAlso: AX=8000h"FaxBIOS",AX=CBDDh
  6906.  
  6907. (Table 2577)
  6908. Values for FaxBIOS function number:
  6909.  0001h    SYS_LOGIN
  6910.  0002h    SYS_LOGOUT
  6911.  0003h    SYS_GET_FAXAPP_INFO
  6912.  0004h    STAT_IO_GET
  6913.  0005h    STAT_FAXBIOS_GET
  6914.  0006h    PDIR_OPEN
  6915.  0007h    PDIR_CLOSE (see #2587)
  6916.  0008h    PDIR_READ_PERSON (see #2588)
  6917.  0009h    PDIR_PARTIAL_READ
  6918.  000Ah    PDIR_READ_GROUP
  6919.  000Bh    PDIR_READ_MEMBER_LIST
  6920.  000Ch    PDIR_WRITE_PERSON
  6921.  000Dh    PDIR_WRITE_GROUP
  6922.  000Eh    PDIR_DELETE_PERSON
  6923.  000Fh    PDIR_DELETE_GROUP
  6924.  0010h    PDIR_READ_GROUP_LIST
  6925.  0011h    PDIR_IN_GROUP
  6926.  0012h    PDIR_OUT_GROUP
  6927.  0013h    SCHED_OPEN (see #2589)
  6928.  0014h    SCHED_ADD_DEST (see #2590)
  6929.  0015h    SCHED_ADD_FILE (see #2591)
  6930.  0016h    SCHED_SET_PARAMS (see #2592)
  6931.  0017h    SCHED_CANCEL (see #2589)
  6932.  0018h    SCHED_CLOSE (see #2593)
  6933.  0019h    SLOG_OPEN (see #2594)
  6934.  001Ah    SLOG_CLOSE (see #2594)
  6935.  001Bh    SLOG_SHORT_ENV_STAT
  6936.  001Ch    SLOG_LONG_ENV_STAT
  6937.  001Dh    SLOG_DEST_STAT
  6938.  001Eh    SLOG_FILE_STAT
  6939.  001Fh    SLOG_CANCEL_ENV
  6940.  0020h    RLOG_OPEN (see #2594)
  6941.  0021h    RLOG_CLOSE (see #2594)
  6942.  0022h    RLOG_READ
  6943.  0023h    GRAPH_GET_FILE_TYPE (see #2595)
  6944.  0024h    GRAPH_EXPORT_FILE
  6945.  0025h    GRAPH_GET_LAYOUT_INFO
  6946.  0026h    GRAPH_CREATE_FILE (see #2596)
  6947.  0027h    GRAPH_CLOSE_FILE (see #2597)
  6948.  0028h    GRAPH_CREATE_PAGE (see #2598)
  6949.  0029h    GRAPH_WRITE (see #2599)
  6950.  002Ah    GRAPH_END_PAGE
  6951.  002Bh    GRAPH_OPEN_FILE (see #2600)
  6952.  002Ch    GRAPH_GOTO_PAGE (see #2601)
  6953.  002Dh    GRAPH_READ (see #2602)
  6954.  002Eh    IOCTL_GET
  6955.  002Fh    IOCTL_SET
  6956.  0030h    IOCTL_ANSWER_FAX (see #2603)
  6957.  0031h    IOCTL_DIAL (see #2604)
  6958.  
  6959. (Table 2578)
  6960. Values for FaxBIOS result code:
  6961.  0000h    successful
  6962.  0001h    not prepared or servicing another client (busy)
  6963.  0002h    call failed due to sharing (LOCKED)
  6964.  0003h    logged-in client limit reached (FULL)
  6965.  0004h    transport denied (TRANSPORT_DENIED)
  6966.  0005h    not implemented (NOT_IMPLEMENTED)
  6967.  0006h    aborted while in progress (ABORTED)
  6968.  0007h    permissions denied (PERMISSION_DENIED)
  6969.  0008h    requested data is no longer valid (NO_LONGER_VALID)
  6970.  0080h    unspecified system error occurred
  6971.  0081h    an internal file was not found
  6972.  0082h    an internal file could not be created
  6973.  0083h    an internal file could not be opened
  6974.  0084h    an internal file could not be closed
  6975.  0085h    error occurred writing to an internal file
  6976.  0086h    error occurred reading from an internal file
  6977.  0087h    bad or corrupted file encountered
  6978.  0088h    an access violation occurred
  6979.  0089h    an internal file is empty
  6980.  008Ah    insufficient memory to process request
  6981.  008Bh    FaxBIOS was unable to issue a handle
  6982.  008Ch    an error internal to FaxBIOS occurred
  6983.  008Dh    no room on disk
  6984.  0100h    unspecified error accessing client file
  6985.  0101h    file not found
  6986.  0102h    creation fault
  6987.  0103h    open fault
  6988.  0104h    close fault
  6989.  0105h    write fault
  6990.  0106h    read fault
  6991.  0107h    file corrupted
  6992.  0108h    access violation
  6993.  0109h    empty file
  6994.  0200h    unspecified argument error
  6995.  0201h    bad function
  6996.  0202h    bad option
  6997.  0203h    bad structure size
  6998.  0204h    bad buffer size
  6999.  0205h    bad client ID
  7000.  0300h    unspecified error with token
  7001.  0301h    cover sheet token was invalid
  7002.  0302h    logo token was invalid
  7003.  0303h    signature token was invalid
  7004.  0304h    font token was invalid
  7005.  0305h    phone directory token was invalid
  7006.  0306h    outbound route token was invalid
  7007.  0307h    priority token was invalid
  7008.  0308h    sort token was invalid
  7009.  0309h    billing token was invalid
  7010.  0400h    unspecified handle error
  7011.  0401h    bad Phone Directory handle
  7012.  0402h    bad scheduling handle
  7013.  0403h    bad read send log handle
  7014.  0404h    bad read receive log handle
  7015.  0405h    bad graphics handle
  7016.  0500h    data passed in structure was invalid
  7017.  0501h    name field given is invalid
  7018.  0502h    phone number given is invalid
  7019.  0503h    poll code submitted is invalid
  7020.  0504h    file type constant was invalid
  7021.  0505h    BFT constant not defined or supported
  7022.  0506h    resolution not defined or supported
  7023.  0507h    page length not defined or supported
  7024.  0508h    page width not defined or supported
  7025.  0509h    date & time requested are ridiculous
  7026.  050Ah    Subject text was not an ASCIZ string
  7027.  050Bh    From text was not an ASCIZ string
  7028.  050Ch    requested envelope ID was not found
  7029.  050Dh    requested envelope ID is not valid
  7030.  050Eh    envelope requested was not found
  7031.  050Fh    destination index is out of range
  7032.  0510h    file index is out of range
  7033.  0511h    index into receive log is out of range
  7034.  0512h    file name specified was incomplete or invalid
  7035.  0513h    page selected was out of range
  7036.  0514h    bit width more than byte width
  7037.  0515h    mode for open is not defined
  7038.  0516h    person index is out of range
  7039.  0517h    person ID is out of range
  7040.  0518h    group index out of range or invalid
  7041.  0519h    group ID out of range or invalid
  7042.  051Ah    range of indices to read is invalid
  7043.  051Bh    group name given is invalid
  7044.  051Ch    field_to_use is badly specified
  7045.  051Dh    predicate invalid for field specified
  7046.  0600h    unspecified client procedure error
  7047.  0601h    device of interest is not present
  7048.  0602h    device of interest has been removed
  7049.  0603h    device of interest is not responding
  7050.  0604h    device of interest is disabled
  7051.  0605h    could not dial because device was in use
  7052.  0606h    maximum destination limit exceeded
  7053.  0607h    maximum file limit exceeded
  7054.  0608h    scheduling closed with no destination
  7055.  0609h    scheduling closed with no files or poll
  7056.  060Ah    scheduling closed with no parameters specified
  7057.  060Bh    file type specified does not match file
  7058.  060Ch    file type specified is not supported
  7059.  060Dh    file submitted is not exportable
  7060.  060Eh    file type specified is not imageable
  7061.  060Fh    error converting file
  7062.  0610h    envelope could not be cancelled
  7063.  0611h    Phone Directory is full
  7064.  0612h    record is already in the Phone Directory
  7065.  0613h    selected group in Phone Directory is full
  7066.  0614h    person is already in the group
  7067.  0615h    person is not in the group & cannot be removed
  7068.  0616h    a graphics file to be created already exists
  7069.  0617h    a graphics file to be read is empty
  7070.  0618h    GRAPH_CREATE_PAGE called before GRAPH_END_PAGE
  7071.  0619h    graph read or write attempted without goto or create
  7072.  061Ah    graph page contains no data
  7073.  061Bh    Phone Directory is already open for this client
  7074.  061Ch    schedule log is already open for this client
  7075.  061Dh    receive log is aready open for this client
  7076.  061Eh    Phone Directory function requires write mode
  7077.  0800h    denied exclusive use of the API
  7078.  
  7079. Format of FaxBIOS SYS_LOGIN command buffer:
  7080. Offset    Size    Description    (Table 2579)
  7081.  00h    WORD    structure size
  7082.  02h    WORD    function number
  7083.  04h    WORD    return code
  7084.  06h    WORD    client ID
  7085.  08h    WORD    API Major Version
  7086.  0Ah    WORD    API Minor Version
  7087.  0Ch    DWORD    reserved for manufacturer's use
  7088.  10h 22 BYTEs    manufacturer's ID
  7089.  26h    WORD    highest possible device number
  7090.  28h    WORD    maximum destinations per envelope
  7091.  2Ah    WORD    maximum files per envelope
  7092.  2Ch    WORD    FaxBIOS capabilities (see #2580)
  7093.  2Eh    DWORD    T.30 capabilities (see #2581)
  7094.  32h    WORD    IPC handle
  7095.  34h    DWORD    amount of memory needed to load
  7096.  38h    WORD    scope (00h for public, nonzero for private)
  7097.  3Ah  6 BYTEs    future expansion
  7098.  40h    WORD    structure size
  7099.  
  7100. Bitfields for FaxBIOS capabilities:
  7101. Bit(s)    Description    (Table 2580)
  7102.  0    transmit supported
  7103.  1    receive supported
  7104.  2    IOCTL supported
  7105.  3    IOCTL_DIAL supported
  7106.  4    IOCTL_ANSWER_FAX supported
  7107.  5    manual transmit supported
  7108.  6    optional phone services supported
  7109.  7    canonical phone objects
  7110.  8    seam with next supported
  7111.  
  7112. Bitfields for T.30 capabilities:
  7113. Bit(s)    Description    (Table 2581)
  7114.  0    low vertical resolution (minimum)
  7115.  1    high vertical resolution
  7116.  2    page width 107mm (4.21 in)
  7117.  3    page width 151mm (5.91 in)
  7118.  4    page width 215mm (8.46 in) (minimum)
  7119.  5    page width 255mm (10.04 in)
  7120.  6    page width 303mm (11.93 in)
  7121.  7    unused
  7122.  8    page length 297mm (11.69 in) (minimum)
  7123.  9    page length 364mm (14.33 in)
  7124.  10    page length 279mm (11 in)
  7125.  11    page length unlimited
  7126.  12    Group 4 resolution 300x300
  7127.  13    Group 4 resolution 400x400
  7128.  14    able to respond to poll from remote
  7129.  15    able to poll remote
  7130.  16    binary file transfer supported
  7131.  
  7132. Format of FaxBIOS SYS_LOGOUT command buffer:
  7133. Offset    Size    Description    (Table 2582)
  7134.  00h    WORD    structure size
  7135.  02h    WORD    function number
  7136.  04h    WORD    return code
  7137.  06h    WORD    client ID
  7138.  08h    DWORD    client tag (for client's internal use)
  7139.  0Ch  6 BYTEs    future expansion
  7140.  12h    WORD    structure size
  7141.  
  7142. Format of FaxBIOS SYS_GET_FAXAPP_INFO command buffer:
  7143. Offset    Size    Description    (Table 2583)
  7144.  00h 12 BYTEs    common data (see #2582)
  7145.  0Ch 80 BYTEs    FaxBIOS data
  7146.  5Ch 80 BYTEs    default cover
  7147.  ACh 80 BYTEs    default logo
  7148.  FCh 80 BYTEs    default signature
  7149. 14Ch 80 BYTEs    default font 10
  7150. 19Ch 80 BYTEs    default font 165
  7151. 1ECh 80 BYTEs    default user font
  7152. 23Ch 80 BYTEs    default Pdir
  7153. 28Ch 80 BYTEs    default sort
  7154. 2DCh 10 BYTEs    default bill
  7155. 2E6h 10 BYTEs    default route
  7156. 2F0h 40 BYTEs    default cover sheet form
  7157. 318h 34 BYTEs    valid dial characters
  7158. 33Ah  6 BYTEs    local country code
  7159. 340h  6 BYTEs    local city or area code
  7160. 346h  6 BYTEs    future expansion
  7161. 34Ch    WORD    structure size
  7162.  
  7163. Format of FaxBIOS STAT_IO_GET command buffer:
  7164. Offset    Size    Description    (Table 2584)
  7165.  00h 12 BYTEs    common data (see #2582)
  7166.  0Ch    WORD    device number
  7167.  0Eh    WORD    current activity
  7168.  10h    WORD    number of rings (if ringing)
  7169.  12h    WORD    number of fascimiles transmitted
  7170.  14h    WORD    number of fascimiles received
  7171.  16h    WORD    status of last transmission
  7172.  18h    WORD    envelope number of last transmission
  7173.  1Ah    WORD    index of last destination in envelope
  7174.  1Ch    WORD    status of last reception
  7175.  1Eh    WORD    current page (if session in progress)
  7176.  20h 80 BYTEs    current file
  7177.  70h 104 BYTEs    remote number
  7178.  D8h 20 BYTEs    last name
  7179.  ECh 20 BYTEs    first name
  7180. 100h 32 BYTEs    company name
  7181. 120h 32 BYTEs    notes
  7182. 140h    WORD    current envelope ID (if sending)
  7183. 142h    WORD    total pages in transmission (if sending)
  7184. 144h  6 BYTEs    future expansion
  7185. 14h    WORD    structure size
  7186.  
  7187. Format of FaxBIOS STAT_FAXBIOS_GET command buffer:
  7188. Offset    Size    Description    (Table 2585)
  7189.  00h 12 BYTEs    common data (see #2582)
  7190.  0Ch    WORD    status ID
  7191.  0Eh    WORD    currenty FaxBIOS function number
  7192.  10h    WORD    current Client ID being serviced
  7193.  12h    WORD    number of things to do
  7194.  14h    WORD    number of them done
  7195.  16h    WORD    number of pages to do (if any)
  7196.  18h    WORD    number of them done
  7197.  1Ah    WORD    number of files to do
  7198.  1Ch    WORD    number of them done
  7199.  1Eh 80 BYTEs    current File
  7200.  6Eh    WORD    0 if all devices are idle
  7201.  70h    WORD    number of fascimiles transmitted
  7202.  72h    WORD    number of fascimiles received
  7203.  74h    WORD    status of last transmission in system
  7204.  76h    WORD    envelope ID of last transmission
  7205.  78h    WORD    index of last destination in envelope
  7206.  7Ah    WORD    status of last reception in system
  7207.  7Ch    DWORD    time of next transmission
  7208.  80h  6 BYTEs    future expansion
  7209.  86h    WORD    structure size
  7210.  
  7211. Format of FaxBIOS PDIR_OPEN command buffer:
  7212. Offset    Size    Description    (Table 2586)
  7213.  00h 12 BYTEs    common data (see #2582)
  7214.  0Ch 80 BYTEs    Phone Directory token
  7215.  5Ch 80 BYTEs    sort order token
  7216.  ACh    WORD    open Mode (0 = read, 1 = write)
  7217.  AEh    WORD    Phone Directory handle
  7218.  B0h    WORD    number of people
  7219.  B2h    WORD    number of groups
  7220.  B4h    WORD    bitmap of fields supported by partial read
  7221.  B6h  6 BYTEs    future expansion
  7222.  BCh    WORD    structure size
  7223.  
  7224. Format of FaxBIOS PDIR_CLOSE command buffer:
  7225. Offset    Size    Description    (Table 2587)
  7226.  00h 12 BYTEs    common data (see #2582)
  7227.  0Ch    WORD    Phone Directory handle
  7228.  0Eh  6 BYTEs    future expansion
  7229.  14h    WORD    structure size
  7230.  
  7231. Format of FaxBIOS PDIR_READ_PERSON command buffer:
  7232. Offset    Size    Description    (Table 2588)
  7233.  00h 12 BYTEs    common data (see #2582)
  7234.  0Ch    WORD    Phone Directory handle
  7235.  0Eh    WORD    retrieve by index
  7236.  10h    WORD    person ID or index
  7237.  12h    WORD    how many groups person is in
  7238.  14h    WORD    person ID
  7239.  16h 20 BYTEs    last name
  7240.  2Ah 20 BYTEs    first name
  7241.  3Eh 32 BYTEs    company
  7242.  5Eh 32 BYTEs    notes
  7243.  7Eh  6 BYTEs    FAX country code
  7244.  84h  6 BYTEs    FAX city/area code
  7245.  8Ah 14 BYTEs    FAX local number
  7246.  98h 14 BYTEs    FAX extension
  7247.  A6h 24 BYTEs    reserved
  7248.  BEh  6 BYTEs    voice country code
  7249.  C4h  6 BYTEs    voice city/area code
  7250.  CAh 14 BYTEs    voice local number
  7251.  D8h 14 BYTEs    voice extension
  7252.  E6h 24 BYTEs    reserved
  7253.  FEh 10 BYTEs    outbound routing information
  7254. 108h 10 BYTEs    billing information, credit card etc
  7255. 112h    DWORD    remote FAX capabilities
  7256. 116h 21 BYTEs    T.30 poll code of FAX number
  7257. 12Bh 15 BYTEs    reserved
  7258. 13Ah  6 BYTEs    future expansion
  7259. 140h    WORD    structure size
  7260.  
  7261. Format of FaxBIOS SCHED_OPEN, SCHED_CANCEL command buffer:
  7262. Offset    Size    Description    (Table 2589)
  7263.  00h 12 BYTEs    common data (see #2582)
  7264.  0Ch    WORD    scheduler handle
  7265.  0Eh  6 BYTEs    future expansion
  7266.  14h    WORD    structure size
  7267.  
  7268. Format of FaxBIOS SCHED_ADD_DEST command buffer:
  7269. Offset    Size    Description    (Table 2590)
  7270.  00h 12 BYTEs    common data (see #2582)
  7271.  0Ch    WORD    schedule handle
  7272.  0Eh    WORD    device number if manual send wanted
  7273.  10h    WORD    non-zero if poll desired
  7274.  12h    WORD    person ID
  7275.  14h 20 BYTEs    last name
  7276.  28h 20 BYTEs    first name
  7277.  3Ch 32 BYTEs    company
  7278.  5Ch 32 BYTEs    notes
  7279.  7Ch  6 BYTEs    FAX country code
  7280.  82h  6 BYTEs    FAX city/area code
  7281.  88h 14 BYTEs    FAX local number
  7282.  96h 14 BYTEs    FAX extension
  7283.  A4h 24 BYTEs    reserved
  7284.  BCh  6 BYTEs    voice country code
  7285.  C2h  6 BYTEs    voice city/area code
  7286.  C8h 14 BYTEs    voice local number
  7287.  D6h 14 BYTEs    voice extension
  7288.  E4h 24 BYTEs    reserved
  7289.  FCh 10 BYTEs    outbound routing information
  7290. 106h 10 BYTEs    billing information, credit card etc
  7291. 110h    DWORD    remote FAX capabilities
  7292. 114h 21 BYTEs    T.30 poll code of FAX number
  7293. 129h 15 BYTEs    reserved
  7294. 138h  6 BYTEs    future expansion
  7295. 13Eh    WORD    structure size
  7296. SeeAlso: #2591
  7297.  
  7298. Format of FaxBIOS SCHED_ADD_FILE command buffer:
  7299. Offset    Size    Description    (Table 2591)
  7300.  00h 12 BYTEs    common data (see #2582)
  7301.  0Ch    WORD    schedule handle
  7302.  0Eh    WORD    file type
  7303.         0000h unidentified
  7304.         0001h native file format
  7305.         0002h ASCII
  7306.         0003h FaxBIOS Tiff Class F
  7307.  10h 80 BYTEs    file name
  7308.  60h 80 BYTEs    font token
  7309.  B0h    WORD    conversion options bitmap
  7310.  B2h    WORD    resolution
  7311.         0000h standard 98 lines per inch, 204 dpi
  7312.         0001h fine 196 lines per inch, 204 dpi
  7313.         0002h Group4 300 dpi
  7314.         0003h Group4 400 dpi
  7315.  B4h    WORD    page length
  7316.         0000h 279 mm (11 in)
  7317.         0001h 297 mm (11.69 in)
  7318.         0002h 364 mm (14.33 in)
  7319.         0003h unlimited
  7320.  B6h    WORD    page width
  7321.         0000h 215 mm (8.46 in)
  7322.         0001h 255 mm (10.04 in)
  7323.         0002h 303 mm (11.93 in)
  7324.         0003h 151 mm (5.91 in)
  7325.         0004h 107 mm (4.21 in)
  7326.  B8h    WORD    binary file transfer specification
  7327.         0000h only as FAX
  7328.         0001h only as file (for non-faxable files)
  7329.         0002h as file when possible else FAX
  7330.  BAh    WORD    seam flag (nonzero for seam with next)
  7331.  BCh    WORD    delete flag (nonzero to delete when done)
  7332.  BEh  6 BYTEs    future expansion
  7333.  C4h    WORD    structure size
  7334. SeeAlso: #2590,#2592
  7335.  
  7336. Format of FaxBIOS SCHED_SET_PARAMS command buffer:
  7337. Offset    Size    Description    (Table 2592)
  7338.  00h 12 BYTEs    common data (see #2582)
  7339.  0Ch    WORD    scheduler handle
  7340.  0Eh    DWORD    time to send
  7341.  10h 10 BYTEs    priority token
  7342.  1Ch 80 BYTEs    logo file token
  7343.  6Ch 80 BYTEs    signature file token
  7344.  BCh 80 BYTEs    cover page token
  7345. 10Ch 40 BYTEs    Subject text
  7346. 134h 40 BYTEs    From text
  7347. 15Ch    WORD    user ID
  7348. 15Eh  6 BYTEs    future expansion
  7349. 164h    WORD    structure size
  7350. SeeAlso: #2590,#2591,#2593
  7351.  
  7352. Format of FaxBIOS SCHED_CLOSE command buffer:
  7353. Offset    Size    Description    (Table 2593)
  7354.  00h 12 BYTEs    common data (see #2582)
  7355.  0Ch    WORD    scheduler handle
  7356.  0Eh    WORD    envelope ID generated
  7357.  10h  6 BYTEs    future expansion
  7358.  16h    WORD    structure size
  7359. SeeAlso: #2592
  7360.  
  7361. Format of FaxBIOS SLOG_OPEN, SLOG_CLOSE, RLOG_OPEN, RLOG_CLOSE command buffer:
  7362. Offset    Size    Description    (Table 2594)
  7363.  00h 12 BYTEs    common data (see #2582)
  7364.  0Ch    WORD    log handle
  7365.  0Eh    WORD    number of entries
  7366.  10h  6 BYTEs    future expansion
  7367.  16h    WORD    structure size
  7368.  
  7369. Format of FaxBIOS GRAPH_GET_FILE_TYPE command buffer:
  7370. Offset    Size    Description    (Table 2595)
  7371.  00h 12 BYTEs    common data (see #2582)
  7372.  0Ch 80 BYTEs    filename
  7373.  5Ch    WORD    file type
  7374.         0000h unidentified
  7375.         0001h native file format
  7376.         0002h ASCII
  7377.         0003h FaxBIOS Tiff Class F
  7378.  5Eh    WORD    bitmap of supported capabilities
  7379.  60h  6 BYTEs    future expansion
  7380.  66h    WORD    structure size
  7381. SeeAlso: #2596,#2597
  7382.  
  7383. Format of FaxBIOS GRAPH_CREATE_FILE command buffer:
  7384. Offset    Size    Description    (Table 2596)
  7385.  00h 12 BYTEs    common data (see #2582)
  7386.  0Ch 80 BYTEs    filename
  7387.  5Ch    WORD    graph handle
  7388.  5Eh  6 BYTEs    future expansion
  7389.  64h    WORD    structure size
  7390. SeeAlso: #2595,#2597,#2598
  7391.  
  7392. Format of FaxBIOS GRAPH_CLOSE_FILE, GRAPH_END_PAGE command buffer:
  7393. Offset    Size    Description    (Table 2597)
  7394.  00h 12 BYTEs    common data (see #2582)
  7395.  0Ch    WORD    graph handle
  7396.  0Eh  6 BYTEs    future expansion
  7397.  14h    WORD    structure size
  7398. SeeAlso: #2596,#2598
  7399.  
  7400. Format of FaxBIOS GRAPH_CREATE_PAGE command buffer:
  7401. Offset    Size    Description    (Table 2598)
  7402.  00h 12 BYTEs    common data (see #2582)
  7403.  0Ch    WORD    graph handle
  7404.  0Eh    WORD    resolution
  7405.  10h    WORD    page width
  7406.  12h  6 BYTEs    future expansion
  7407.  18h    WORD    structure size
  7408. SeeAlso: #2596,#2597,#2599
  7409.  
  7410. Format of FaxBIOS GRAPH_WRITE_PAGE command buffer:
  7411. Offset    Size    Description    (Table 2599)
  7412.  00h 12 BYTEs    common data (see #2582)
  7413.  0Ch    WORD    graph handle
  7414.  0Eh    DWORD    pointer to storage for image
  7415.  12h    WORD    band height in lines
  7416.  14h    WORD    width of page image in bytes
  7417.  16h    WORD    facsimile page width constant
  7418.  18h    WORD    width of page image in bits
  7419.  1Ah    WORD    number of bytes actually processed
  7420.  1Ch  6 BYTEs    future expansion
  7421.  22h    WORD    structure size
  7422. SeeAlso: #2598,#2600
  7423.  
  7424. Format of FaxBIOS GRAPH_OPEN_FILE command buffer:
  7425. Offset    Size    Description    (Table 2600)
  7426.  00h 12 BYTEs    common data (see #2582)
  7427.  0Ch 80 BYTEs    filename
  7428.  5Ch    WORD    file type
  7429.  5Eh    WORD    graph handle
  7430.  60h    WORD    number of pages
  7431.  62h  6 BYTEs    future expansion
  7432.  68h    WORD    structure size
  7433. SeeAlso: #2599,#2601
  7434.  
  7435. Format of FaxBIOS GRAPH_GOTO_PAGE command buffer:
  7436. Offset    Size    Description    (Table 2601)
  7437.  00h 12 BYTEs    common data (see #2582)
  7438.  0Ch    WORD    graph handle
  7439.  0Eh    WORD    page number
  7440.  10h    WORD    vertical resolution
  7441.  12h    WORD    page width
  7442.  14h    DWORD    page length
  7443.  18h  6 BYTEs    future expansion
  7444.  1Eh    WORD    structure size
  7445. SeeAlso: #2599,#2600,#2602
  7446.  
  7447. Format of FaxBIOS GRAPH_READ_PAGE command buffer:
  7448. Offset    Size    Description    (Table 2602)
  7449.  00h 12 BYTEs    common data (see #2582)
  7450.  0Ch    WORD    graph handle
  7451.  0Eh    DWORD    pointer to storage for image
  7452.  12h    WORD    band height in lines
  7453.  14h    WORD    width of page image in bytes
  7454.  16h    WORD    facsimile page width constant
  7455.  18h    WORD    width of page image in bits
  7456.  1Ah    WORD    number of bytes actually processed
  7457.  1Ch  6 BYTEs    future expansion
  7458.  22h    WORD    structure size
  7459.  
  7460. Format of FaxBIOS IOCTL_ANSWER_FAX command buffer:
  7461. Offset    Size    Description    (Table 2603)
  7462.  00h 12 BYTEs    common data (see #2582)
  7463.  0Ch    WORD    device number
  7464.  0Eh  6 BYTEs    future expansion
  7465.  14h    WORD    structure size
  7466. SeeAlso: #2604
  7467.  
  7468. Format of FaxBIOS IOCTL_DIAL command buffer:
  7469. Offset    Size    Description    (Table 2604)
  7470.  00h 12 BYTEs    common data (see #2582)
  7471.  0Ch    WORD    device number
  7472.  0Eh  6 BYTEs    country code
  7473.  14h  6 BYTEs    city or area code
  7474.  1Ah 14 BYTEs    local number
  7475.  28h 14 BYTEs    extension
  7476.  36h 14 BYTEs    reserved
  7477.  4Eh  6 BYTEs    future expansion
  7478.  54h    WORD    structure size
  7479. SeeAlso: #2603
  7480. --------N-2F8100-----------------------------
  7481. INT 2F U - Nanosoft, Inc. TurboNET redirector - INSTALLATION CHECK
  7482.     AX = 8100h
  7483. Return: AL = FFh if installed
  7484. Program: TurboNET is a NetBIOS-based file redirector and server; a
  7485.       demonstration version may be downloaded from Nanosoft's BBS
  7486. SeeAlso: AX=8000h"TurboNET"
  7487. --------N-2F8101-----------------------------
  7488. INT 2F U - Nanosoft, Inc. TurboNET redirector - ???
  7489.     AX = 8101h
  7490. Return: AL = ???
  7491.     DL = ???
  7492. --------N-2F8102-----------------------------
  7493. INT 2F U - Nanosoft, Inc. TurboNET redirector - ???
  7494.     AX = 8102h
  7495. Return: AL = ???
  7496.     DL = ???
  7497. --------N-2F8103-----------------------------
  7498. INT 2F U - Nanosoft, Inc. TurboNET redirector - GET MACHINE NAME???
  7499.     AX = 8103h
  7500.     ES:DI -> 17-byte buffer
  7501. Return: buffer filled
  7502. --------N-2F8104-----------------------------
  7503. INT 2F U - Nanosoft, Inc. TurboNET redirector - ???
  7504.     AX = 8104h
  7505.     BL = ???
  7506.     BH = ???
  7507.     CX = ???
  7508.     DX = ???
  7509.     DS:SI -> 16-byte buffer containing ???
  7510. Return: AL = 00h ???
  7511. --------N-2F8105-----------------------------
  7512. INT 2F U - Nanosoft, Inc. TurboNET redirector - ???
  7513.     AX = 8105h
  7514.     CX = ??? (don't change current value if 0000h)
  7515.     DX = ??? (don't change current value if 0000h)
  7516. Return: AL = 00h successful
  7517. --------s-2F8200-----------------------------
  7518. INT 2F - RESPLAY - SAMPLE/PLAYBACK
  7519.     AX = 8200h
  7520.     DX:DI -> start of sample space
  7521.     CX:BX = length in bytes
  7522. Return: AX = status (see #2605)
  7523. Program: RESPLAY is a freeware sound sampling/playback utility by Mark J. Cox
  7524. SeeAlso: AX=8201h"RESPLAY",AX=8210h
  7525.  
  7526. (Table 2605)
  7527. Values for RESPLAY status:
  7528.  1000h    successful
  7529.  2000h    not initialized (see AX=8210h)
  7530.  other    RESPLAY not installed
  7531. --------G-2F8200-----------------------------
  7532. INT 2F U - Nanosoft, Inc. CAPDOS - INSTALLATION CHECK
  7533.     AX = 8200h
  7534. Return: AL = FFh if installed
  7535. Program: CAPDOS is a TSR by Nanosoft, Inc. which allows INT 21h calls to be
  7536.       captured and recorded for later analysis
  7537. SeeAlso: AX=8100h,AX=8201h"CAPDOS",AX=8202h"CAPDOS",AX=8203h"CAPDOS"
  7538. SeeAlso: AX=8204h"CAPDOS"
  7539. --------s-2F8201-----------------------------
  7540. INT 2F - RESPLAY - INSTALLATION CHECK
  7541.     AX = 8201h
  7542. Return: AX = 7746h if installed
  7543. SeeAlso: AX=8202h"RESPLAY",AX=8210h
  7544. --------G-2F8201-----------------------------
  7545. INT 2F - Nanosoft, Inc. CAPDOS - CLEAR QUEUE
  7546.     AX = 8201h
  7547. Note:    resets queue of captured INT 21 calls
  7548. SeeAlso: AX=8200h"CAPDOS"
  7549. --------s-2F8202-----------------------------
  7550. INT 2F - RESPLAY - UNINSTALL
  7551.     AX = 8202h
  7552. Return: AX = status
  7553.         1000h successful
  7554. SeeAlso: AX=8201h"RESPLAY",AX=8210h"RESPLAY"
  7555. --------G-2F8202-----------------------------
  7556. INT 2F - Nanosoft, Inc. CAPDOS - START COLLECTION
  7557.     AX = 8202h
  7558. SeeAlso: AX=8200h"CAPDOS",AX=8203h"CAPDOS"
  7559. --------G-2F8203-----------------------------
  7560. INT 2F - Nanosoft, Inc. CAPDOS - STOP COLLECTION
  7561.     AX = 8203h
  7562. SeeAlso: AX=8200h"CAPDOS",AX=8202h"CAPDOS",AX=8204h"CAPDOS"
  7563. --------G-2F8204-----------------------------
  7564. INT 2F - Nanosoft, Inc. CAPDOS - GET QUEUE PARAMETERS
  7565.     AX = 8204h
  7566. Return: AH = flag: queue wrapped if nonzero
  7567.     BX = index of current start of queue
  7568.     CX = size of queue in entries
  7569. SeeAlso: AX=8200h"CAPDOS",AX=8202h"CAPDOS",AX=8205h"CAPDOS"
  7570. --------G-2F8205-----------------------------
  7571. INT 2F - Nanosoft, Inc. CAPDOS - GET QUEUE ITEM
  7572.     AX = 8205h
  7573.     BX = queue item number
  7574. Return: AX,BX,CX,DX,SI,DI,DS,ES as on entry to captured DOS call
  7575. SeeAlso: AX=8200h"CAPDOS",AX=8204h"CAPDOS"
  7576. --------s-2F8210-----------------------------
  7577. INT 2F - RESPLAY - INITIALIZE
  7578.     AX = 8210h
  7579.     BL = sound device number (see #2606)
  7580.     BH = sample rate in multiples of 250 Hz (14h to A0h)
  7581.     CL = direction
  7582.         00h playback
  7583.         01h sample
  7584. Return: AX = status (see #2605)
  7585. SeeAlso: AX=8200h"RESPLAY",AX=8220h"MODRES"
  7586.  
  7587. (Table 2606)
  7588. Values for RESPLAY sound device:
  7589.  00h    printer port LPT1
  7590.  01h    printer port LPT2
  7591.  02h    prototype board at I/O address 0300h
  7592.  03h    printer port (alternative LPT1)
  7593.  04h    internal speaker
  7594. --------s-2F8220-----------------------------
  7595. INT 2F - MODRES - PLAY MODULE
  7596.     AX = 8220h
  7597.     DX:CX -> MODPARM structure (see #2607)
  7598. Return: AX = status
  7599.         5722h succesful
  7600.         2000h parameters out of range
  7601.         other MODRES not installed
  7602. SeeAlso: AX=8221h,AX=8223h,AX=8225h,AX=8227h,AX=8200h"RESPLAY"
  7603.  
  7604. Format of MODPARM Structure:
  7605. Offset    Size    Description    (Table 2607)
  7606.  00h    WORD    signature 504Dh ("MP" = Modparm)
  7607.  02h    BYTE    output device (see #2609 at INT 2F/AX=8221h)
  7608.  03h    WORD    segment of start of main module (pattern) data
  7609.  05h 31    WORDs    segment of start of sample numbers 1-31
  7610.  43h    BYTE    pattern at which to start playing (00h to 7Fh)
  7611.  44h    BYTE    function
  7612.         00h play from pattern [offset 43h] until end of the song
  7613.         01h play indicated pattern [offset 43h] only
  7614.  45h    BYTE    Machine speed
  7615.         00h 10-12Mhz
  7616.         01h 12-25Mhz (default)
  7617.         02h 25Mhz+
  7618.         03h mix speed 10kHz (fast 8Mhz machines)
  7619.         04h mix speed 12kHz (10Mhz machines)
  7620.         05h mix speed 13kHz
  7621.         06h mix speed 8kHz (test for 8Mhz machines)
  7622.  46h    BYTE    allow >64k sample playing
  7623.         80h MOD has samples >64k in it
  7624.         else all samples in MOD are <64k
  7625. Notes:    Main module data and all samples must start on segment boundaries.
  7626.     In version 2.00 (ONLY) this function carries on playing (works in
  7627.       the background)
  7628. SeeAlso: #2608
  7629. --------s-2F8221-----------------------------
  7630. INT 2F - MODRES - INSTALLATION CHECK
  7631.     AX = 8221h
  7632. Return: AX = status
  7633.         5722h successful
  7634.         other MODRES not installed
  7635.     BX = BCD version number (BH = major, BL = minor)
  7636.     DX:CX -> Output Device structure (read-only) (see #2608)
  7637. SeeAlso: AX=8220h,AX=8222h,AX=8225h,AX=8227h
  7638.  
  7639. Format of Output Device structure [array]:
  7640. Offset    Size    Description    (Table 2608)
  7641.  00h 20 BYTEs    ASCIZ name of the output device
  7642.         (end of list if first char is FFh)
  7643.  14h    WORD    apparently always FFFFh
  7644.  16h    WORD    0000h if output device not available
  7645.         else first I/O port for the output device
  7646.  18h    WORD    second I/O port for the output device (for example
  7647.           if it is stereo)
  7648.         000oh if only one port used or device is not available
  7649.  1Ah  7 BYTEs    ???
  7650. SeeAlso: #2607,#2609
  7651.  
  7652. (Table 2609)
  7653. Values for MODRES v1.52 output device index:
  7654.  00h    PC speaker
  7655.  01h    D/A Converter on LPT1
  7656.  02h    D/A Converter on LPT2
  7657.  03h    D/A Converter on LPT3
  7658.  04h    D/A Converter on LPT4
  7659.  05h    D/A Converter on LPT1&LPT2 (stereo)
  7660.  06h    D/A Converter on LPT1&LPT2 (mono)
  7661.  07h    Sound Blaster (port 02x0h)
  7662.  08h    User Defined D/A (mono)
  7663.  09h    User Defined D/A (stereo)
  7664.  0Ah    Stereo-on-1
  7665.  0Bh    Disney SS su LPT1
  7666.  0Ch    Disney SS su LPT2
  7667.  0Dh    Disney SS su LPT3
  7668.  0Eh    Disney SS su LPT4
  7669. Note:    this list may vary between versions of MODRES
  7670. --------s-2F8222-----------------------------
  7671. INT 2F - MODRES - UNINSTALL
  7672.     AX = 8222h
  7673. Return: AX = code segment of the program
  7674. Note:    this function does not release the TSRs memory; the caller must do so
  7675. SeeAlso: AX=8220h,AX=8221h,AX=8223h
  7676. --------s-2F8223-----------------------------
  7677. INT 2F - MODRES - PLAY SAMPLE
  7678.     AX = 8223h
  7679.     DX:CX -> SAMPARM structure (see #2610)
  7680. Return: AX = status
  7681.         5722h succesful
  7682.         2000h parameters out of range
  7683.         other MODRES not installed
  7684. SeeAlso: AX=8221h,AX=8224h,AX=8225h,AX=8226h
  7685.  
  7686. Format of SAMPARM Structure:
  7687. Offset    Size    Description    (Table 2610)
  7688.  00h    WORD    signature 5053h ("SP" = SAMPARM)
  7689.  02h    WORD    segment of start of sample to play
  7690.  04h    WORD    length of sample (IN WORD)
  7691.  06h    BYTE    output device (see #2609 at INT 2F/AX=8221h)
  7692.  07h    WORD    pitch to play (see #2611)
  7693.  09h    BYTE    volume (from 00h to 40h)
  7694.  0Ah    WORD    loop start
  7695.  0Ch    WORD    loop length
  7696.  0Eh    BYTE    machine speed (see INT 2F/AX=8220h)
  7697. SeeAlso: #2607
  7698.  
  7699. (Table 2611)
  7700. Values for Pitch to play::
  7701.  C 0 is    06B0h
  7702.  C#0 is    06B0h / 2^(1/12)
  7703.  D 0 is    (06B0h / 2^(1/12)) / 2^(1/12)
  7704.  ...
  7705. Note:    C 1 is    06B0h / 2
  7706.     C 2 is    06B0h / 4
  7707.     etc.
  7708. SeeAlso: #2610
  7709. --------s-2F8224-----------------------------
  7710. INT 2F - MODRES - ???
  7711.     AX = 8224h
  7712.     DX:CX -> ???
  7713. Return: ???
  7714. SeeAlso: AX=8221h,AX=8223h,AX=8224h
  7715. --------s-2F8225-----------------------------
  7716. INT 2F - MODRES v2.00+ - GET LOCATION IN MOD
  7717.     AX = 8225h
  7718. Return: AL = status
  7719.        00h playing
  7720.        01h reached end or stopped
  7721.     AH = speed of MOD
  7722.     BX = position within pattern 0000h-0400h
  7723.     CL = position within the song (track number)
  7724. SeeAlso: AX=8220h,AX=8221h,AX=8223h,AX=8226h
  7725. --------s-2F8226-----------------------------
  7726. INT 2F - MODRES v2.00+ - STOP PLAYING
  7727.     AX = 8226h
  7728. Return: AX = status
  7729.         5722h succesful
  7730.         other MODRES not installed
  7731. Desc:    stops playing the MOD file before performing critical operations such
  7732.       as disk accesses
  7733. SeeAlso: AX=8220h,AX=8221h,AX=8223h,AX=8225h,AX=8227h
  7734. --------s-2F8227-----------------------------
  7735. INT 2F - MODRES - CONFIGURE
  7736.     AX = 8227h
  7737.     BX = function
  7738.         0001h set default playing speed (06h)
  7739.         0002h select output device
  7740.         CL = output device (see #2609 at INT 2F/AX=8221h)
  7741. Return: AX = status
  7742.         5722h succesful
  7743.         2000h parameters out of range
  7744.         other MODRES not installed
  7745. Note:    function 0001h should be called every time a new module is loaded
  7746. SeeAlso: AX=8220h,AX=8221h,AX=8222h,AX=8223h
  7747. ----------2F86-------------------------------
  7748. INT 2F U - ???
  7749.     AH = 86h
  7750.     AL = function (at least 06h and 07h)
  7751.     ???
  7752. Return: ???
  7753. Note:    called by Codeview for Windows
  7754. SeeAlso: AH=44h
  7755. --------U-2F8900-----------------------------
  7756. INT 2F - WHOA!.COM - INSTALLATION CHECK
  7757.     AX = 8900h
  7758. Return: AL = state
  7759.         00h not installed
  7760.         FFh installed
  7761. Program: WHOA!.COM is a system slow-down utility by Brad D Crandall
  7762. SeeAlso: AX=8901h,AX=8902h
  7763. --------U-2F8901-----------------------------
  7764. INT 2F - WHOA!.COM - UNINSTALL
  7765.     AX = 8901h
  7766. Return: AL = status
  7767.         FDh successful
  7768.         FEh error
  7769. SeeAlso: AX=8900h
  7770. --------U-2F8902-----------------------------
  7771. INT 2F - WHOA!.COM - SET DELAY COUNT
  7772.     AX = 8902h
  7773.     BX = delay count (larger values slow system down more)
  7774. Return: AL = status
  7775.         FDh successful
  7776.         FEh error
  7777. Program: WHOA!.COM is a system slow-down utility by Brad D Crandall
  7778. SeeAlso: AX=8900h
  7779. --------U-2F9000-----------------------------
  7780. INT 2F U - RAID - INSTALLATION CHECK
  7781.     AX = 9000h
  7782. Return: AL = FFh if installed
  7783. Program: RAID (Resident AID) is a TSR utility program by Ross Neilson
  7784.       Wentworth that resides mostly in EMS
  7785. --------U-2F9001-----------------------------
  7786. INT 2F U - RAID - GET ???
  7787.     AX = 9001h
  7788. Return: DX:AX -> ???
  7789. SeeAlso: AX=9000h
  7790. --------U-2F9002-----------------------------
  7791. INT 2F U - RAID - GET RESIDENT SEGMENT
  7792.     AX = 9002h
  7793. Return: AX = segment of resident (conventional memory) portion
  7794. SeeAlso: AX=9000h
  7795. --------U-2F9003-----------------------------
  7796. INT 2F U - RAID - UNINSTALL
  7797.     AX = 9003h
  7798. Return: ???
  7799. SeeAlso: AX=9000h
  7800. --------U-2F9004-----------------------------
  7801. INT 2F U - RAID - GET ???
  7802.     AX = 9004h
  7803. Return: AX = first available paragraph past end of resident portion???
  7804.     CX destroyed
  7805. SeeAlso: AX=9000h
  7806. --------e-2F92-------------------------------
  7807. INT 2F - Network Courier E-Mail - API
  7808.     AH = 92h
  7809.     AL = function
  7810.         00h installation check
  7811.         01h uninstall
  7812.         02h pop down MICRO.EXE notification window
  7813.         03h ???
  7814.         04h ???
  7815.         05h ???
  7816. Return: ???
  7817. Program: The Network Courier is an electronic mail package by Consumers
  7818.       Software of Vancouver, BC which was bought by Microsoft in 1991 and
  7819.       renamed Microsoft Mail v3.0.
  7820. SeeAlso: AX=9400h,AX=9401h,AX=9402h,AH=9Ch
  7821. Index:    installation check;Network Courier E-Mail
  7822. Index:    uninstall;Network Courier E-Mail
  7823. --------R-2F9200-----------------------------
  7824. INT 2F U - PC Tools v8.0 DRIVEMAP - BUG
  7825.     AX = 9200h
  7826. Program: DRIVEMAP is a redirector which allows drives on computers connected
  7827.       over the parallel or serial ports to appear as local drives
  7828. BUG:    jumps to data because jump table entry is 0000h
  7829. Note:    DRIVEMAP returns AX=FFFFh if not a valid function number in AL
  7830. --------R-2F9201-----------------------------
  7831. INT 2F U - PC Tools v8.0 DRIVEMAP - CHECK IF MAPPED DRIVE
  7832.     AX = 9201h
  7833.     DL = drive number (01h = A:, etc.)
  7834. Return: AL = 92h if mapped drive
  7835.     AH may be destroyed (v8.0 DRIVEMAP returns AX=0000h if not mapped)
  7836. SeeAlso: AX=9204h,AX=920Bh
  7837. --------R-2F9202-----------------------------
  7838. INT 2F U - PC Tools v8.0 DRIVEMAP - UNINSTALL
  7839.     AX = 9202h
  7840.     BX = caller's CS
  7841. Return: AX = status
  7842.         0000h failed
  7843.         nonzero successful
  7844. SeeAlso: AX=9204h
  7845. --------R-2F9203-----------------------------
  7846. INT 2F U - PC Tools v8.0 DRIVEMAP - GET VERSION
  7847.     AX = 9203h
  7848. Return: AH = major version
  7849.     AL = minor version
  7850.     CX = segment of resident code
  7851. Note:    the DRIVEMAP included with PC Tools v8.0 is version 1.00
  7852. SeeAlso: AX=9204h,INT 16/AX=FF70h
  7853. --------R-2F9204-----------------------------
  7854. INT 2F U - PC Tools v8.0 DRIVEMAP - INSTALLATION CHECK
  7855.     AX = 9204h
  7856. Return: AX = 9200h if installed
  7857.        BL = ???
  7858.        CX = segment of resident code
  7859. Program: DRIVEMAP is a redirector which allows drives on computers connected
  7860.       over the parallel or serial ports to appear as local drives
  7861. SeeAlso: AX=9201h,AX=9202h,AX=9203h
  7862. --------R-2F9205-----------------------------
  7863. INT 2F U - PC Tools v8.0 DRIVEMAP - SET ???
  7864.     AX = 9205h
  7865.     BX = ??? to set
  7866. Return: CX = new value of ???
  7867. --------R-2F9206-----------------------------
  7868. INT 2F U - PC Tools v8.0 DRIVEMAP - ???
  7869.     AX = 9206h
  7870.     ???
  7871. Return: ???
  7872. --------R-2F9207-----------------------------
  7873. INT 2F U - PC Tools v8.0 DRIVEMAP - GET ???
  7874.     AX = 9207h
  7875.     ???
  7876. Return: AX = ???
  7877. --------R-2F9208-----------------------------
  7878. INT 2F U - PC Tools v8.0 DRIVEMAP - ???
  7879.     AX = 9208h
  7880.     ???
  7881. Return: ???
  7882. --------R-2F9209-----------------------------
  7883. INT 2F U - PC Tools v8.0 DRIVEMAP - ???
  7884.     AX = 9209h
  7885.     ???
  7886. Return: AX = ???
  7887.     BX = ???
  7888.     CX = ???
  7889.     DX = ???
  7890. --------R-2F920A-----------------------------
  7891. INT 2F U - PC Tools v8.0 DRIVEMAP - ???
  7892.     AX = 920Ah
  7893.     BX = ???
  7894. Return: AX = ??? or FFFBh on error
  7895. --------R-2F920B-----------------------------
  7896. INT 2F U - PC Tools v8.0 DRIVEMAP - SET DRIVE MAPPING
  7897.     AX = 920Bh
  7898.     BL = drive letter (41h ['A'] = A:, etc)
  7899.     CX = ??? (0000h removes mapping)
  7900. Return: AX = ??? or FFF8h on error
  7901. SeeAlso: AX=9201h,AX=920Dh
  7902. --------R-2F920C-----------------------------
  7903. INT 2F U - PC Tools v8.0 DRIVEMAP - ???
  7904.     AX = 920Ch
  7905.     ???
  7906. Return: AX = ??? (0002h)
  7907.     CX = ??? (0000h)
  7908. --------R-2F920D-----------------------------
  7909. INT 2F U - PC Tools v8.0 DRIVEMAP - GET DRIVE TYPE
  7910.     AX = 920Dh
  7911.     BL = drive letter (41h ['A'] = A:, etc)
  7912. Return: AX = type flags
  7913.         bit 0: ???
  7914.         bit 1: available
  7915.         bit 5: local
  7916.     BX = ???
  7917.     CX = segment of resident code (apparently an unintended side effect)
  7918. Program: DRIVEMAP is a redirector which allows drives on computers connected
  7919.       over the parallel or serial ports to appear as local drives
  7920. SeeAlso: AX=9218h,INT 16/AX=FF70h
  7921. --------R-2F920E-----------------------------
  7922. INT 2F U - PC Tools v8.0 DRIVEMAP - SET LPT MAPPING
  7923.     AX = 920Eh
  7924.     BX = port number (0-2)
  7925.     CX = ??? (0000h to unmap)
  7926. Return: ???
  7927. --------R-2F920F-----------------------------
  7928. INT 2F U - PC Tools v8.0 DRIVEMAP - GET ???
  7929.     AX = 920Fh
  7930.     ES:DI -> 3-byte buffer for ???
  7931. Return: CX = 0000h
  7932.     ES:DI buffer filled
  7933. --------R-2F9210-----------------------------
  7934. INT 2F U - PC Tools v8.0 DRIVEMAP - ???
  7935.     AX = 9210h
  7936.     ???
  7937. Return: ???
  7938. --------R-2F9211-----------------------------
  7939. INT 2F U - PC Tools v8.0 DRIVEMAP - GET ???
  7940.     AX = 9211h
  7941.     ES:DI -> 8-word buffer for ???
  7942. Return: CX = 0000h
  7943.     ES:DI buffer filled
  7944. --------R-2F9212-----------------------------
  7945. INT 2F U - PC Tools v8.0 DRIVEMAP - CRITICAL SECTION???
  7946.     AX = 9212h
  7947.     BX = phase
  7948.         0000h leave critical section???
  7949.         nonzero enter critical section???
  7950. --------R-2F9213-----------------------------
  7951. INT 2F U - PC Tools v8.0 DRIVEMAP - ???
  7952.     AX = 9213h
  7953.     BX = function number (0000h-000Bh)
  7954.     ???
  7955. Return: ???
  7956. --------R-2F9214-----------------------------
  7957. INT 2F U - PC Tools v8.0 DRIVEMAP - GET ???
  7958.     AX = 9214h
  7959.     ES:DI -> 6-word buffer for ???
  7960. Return: CX = 0000h
  7961.     AX = ???
  7962.     ES:DI buffer filled
  7963. --------R-2F9215-----------------------------
  7964. INT 2F U - PC Tools v8.0 DRIVEMAP - GET ???
  7965.     AX = 9215h
  7966.     ES:DI -> 100-word buffer for ???
  7967. Return: CX = 0000h
  7968.     ES:DI buffer filled
  7969. --------R-2F9216-----------------------------
  7970. INT 2F U - PC Tools v8.0 DRIVEMAP - ???
  7971.     AX = 9216h
  7972.     ES:DI -> ???
  7973. Return: ???
  7974. --------R-2F9217-----------------------------
  7975. INT 2F U - PC Tools v8.0 DRIVEMAP - ???
  7976.     AX = 9217h
  7977.     DS:SI -> 25-word buffer containing ???
  7978. Return: ???
  7979. --------R-2F9218-----------------------------
  7980. INT 2F U - PC Tools v8.0 DRIVEMAP - GET LPT TYPE???
  7981.     AX = 9218h
  7982.     BX = port number???
  7983. Return: AX = ???
  7984.     BX = ??? (0000h)
  7985.     CX = ??? (0000h)
  7986. Program: DRIVEMAP is a redirector which allows drives on computers connected
  7987.       over the parallel or serial ports to appear as local drives
  7988. --------R-2F9219-----------------------------
  7989. INT 2F U - PC Tools v8.0 DRIVEMAP - ???
  7990.     AX = 9219h
  7991.     ???
  7992. Return: ???
  7993. --------R-2F921A-----------------------------
  7994. INT 2F U - PC Tools v8.0 DRIVEMAP - ???
  7995.     AX = 921Ah
  7996.     ???
  7997. Return: AH = ???
  7998.     AL = ???
  7999.     BX = ???
  8000. --------R-2F921B-----------------------------
  8001. INT 2F U - PC Tools v8.0 DRIVEMAP - ???
  8002.     AX = 921Bh
  8003.     ???
  8004. Return: AX = ???
  8005.     CX = segment of resident code (apparently an unintended side effect)
  8006. --------R-2F921C-----------------------------
  8007. INT 2F U - PC Tools v8.0 DRIVEMAP - ???
  8008.     AX = 921Ch
  8009.     ???
  8010. Return: ???
  8011. --------R-2F921D-----------------------------
  8012. INT 2F U - PC Tools v8.0 DRIVEMAP - GET ???
  8013.     AX = 921Dh
  8014. Return: AX = ???
  8015. --------R-2F921E-----------------------------
  8016. INT 2F U - PC Tools v8.0 DRIVEMAP - ???
  8017.     AX = 921Eh
  8018.     ???
  8019. Return: ???
  8020. Program: DRIVEMAP is a redirector which allows drives on computers connected
  8021.       over the parallel or serial ports to appear as local drives
  8022. Note:    this function sets two variables to 24h each
  8023. SeeAlso: INT 16/AX=FF70h
  8024. --------V-2F93-------------------------------
  8025. INT 2F - InnerMission v1.7+ - INSTALLATION CHECK
  8026.     AH = 93h
  8027.     BX = CX = AX
  8028. Return: AL = state
  8029.         FFh if installed and BX=CX=AX on entry
  8030.         BX = segment of resident code
  8031.         01h if installed but BX or CX differ from AX (multiplex number not
  8032.           available)
  8033. Program: InnerMission is a shareware graphical screen blanker by Kevin Stokes
  8034. SeeAlso: INT 14/AX=AA01h,INT 2F/AX=6400h
  8035. Index:    screen saver;InnerMission
  8036. --------e-2F9400-----------------------------
  8037. INT 2F - MICRO.EXE - INSTALLATION CHECK
  8038.     AX = 9400h
  8039. Return: AL = 07h or 08h if installed
  8040. Program: MICRO.EXE is a TSR of the Microsoft Mail part of Workgroup Connection
  8041. SeeAlso: AH=92h"Network Courier",AX=9401h,AX=9402h,AX=9403h,AX=9404h
  8042. SeeAlso: INT 21/AH=3Fh"WORKGRP.SYS"
  8043. --------e-2F9401-----------------------------
  8044. INT 2F - MICRO.EXE - SET ??? FLAG
  8045.     AX = 9401h
  8046. SeeAlso: AX=9400h,AX=9403h
  8047. --------e-2F9402-----------------------------
  8048. INT 2F - MICRO.EXE - ???
  8049.     AX = 9402h
  8050.     ???
  8051. Return: ???
  8052. SeeAlso: AX=9400h
  8053. --------e-2F9403-----------------------------
  8054. INT 2F - MICRO.EXE - SET ??? FLAG
  8055.     AX = 9403h
  8056. SeeAlso: AX=9400h,AX=9404h
  8057. --------e-2F9404-----------------------------
  8058. INT 2F - MICRO.EXE - CLEAR ??? FLAG
  8059.     AX = 9404h
  8060.     ES:DI -> name of executable from which MICRO.EXE was started
  8061. Note:    if the specified name is identical to the name of the program file
  8062.       from which MICRO was started, the ??? flag is cleared; otherwise,
  8063.       it is left unchanged
  8064. SeeAlso: AX=9400h,AX=9403h
  8065. --------V-2F96C7-----------------------------
  8066. INT 2F U - STRETCH - INSTALLATION CHECK
  8067.     AX = 96C7h
  8068. Return: AX = AAAAh if installed
  8069. Program: stretch.exe is a TSR for Toshiba Laptops with WD90C24 video chip
  8070.       to avoid blank screen areas in VGA text modes by increasing
  8071.       inter-line spacing
  8072. --------V-2F9800-----------------------------
  8073. INT 2F U - S3RMDRV.SYS - INSTALLATION CHECK / VERSION CHECK
  8074.     AX = 9800h
  8075.     BX = function
  8076.         0000h installation check
  8077.         Return: AX = 524Dh ('RM') if installed
  8078.         0001h get driver version
  8079.         Return: AX = driver version (AH=major, AL=BCD minor)
  8080. Program: S3RMDRV.SYS provides support for the S3 MPEG driver FMPDRV
  8081. SeeAlso: AX=9803h
  8082. --------V-2F9803-----------------------------
  8083. INT 2F U - S3RMDRV.SYS - COPY ??? INTO USER BUFFER
  8084.     AX = 9803h
  8085.     DX:BX -> 116-byte buffer for ASCIZ ???
  8086. Return: AX = 0000h
  8087.     DX:BX buffer filled with string stored in driver from its parameter
  8088.       list when it was loaded
  8089. Note:    the examined version of the driver returns CF set for any AL other
  8090.       than 00h or 03h
  8091. SeeAlso: AX=9800h
  8092. --------l-2F9900-----------------------------
  8093. INT 2F U - DOS Navigator II - INSTALLATION CHECK
  8094.     AX = 9900h
  8095. Return: BX = 4E44h ('ND') if installed
  8096.         AX = number of DOS Navigator executions
  8097.         CL = child process exit code
  8098.         DX = version number (2141h for version II 1.41)
  8099. Notes:    old versions of DOS Navigator II always returned AH=1, while newer
  8100.       ones return AH=0 and store AL in the DN.FLG file
  8101. Program: DOS Navigator is a multi-window shell for MS-DOS by RIT S.R.L.
  8102.       DOS Navigator(TM) is a registered trademark of RIT S.R.L.
  8103. SeeAlso: AX=9901h,AX=9902h,AX=9903h,AX=9904h,AX=9905h,AX=9906h
  8104. --------l-2F9901-----------------------------
  8105. INT 2F U - DOS Navigator II - RETURN POINTER TO COMMAND LINE
  8106.     AX = 9901h
  8107. Return: ES:BX -> command line (terminated with 0Dh)
  8108.     AX = ES
  8109. SeeAlso: AX=9900h,AX=9902h,AX=9903h
  8110. --------l-2F9902-----------------------------
  8111. INT 2F U - DOS Navigator II - SET 'TRUE' EXIT CODE OF DN.PRG
  8112.     AX = 9902h
  8113.     CL = exit code
  8114. Return: AX destroyed
  8115. SeeAlso: AX=9900h,AX=9901h,AX=9903h
  8116. --------l-2F9903-----------------------------
  8117. INT 2F U - DOS Navigator II - SPECIFY HOW TO EXECUTE COMMANDS
  8118.     AX = 9903h
  8119.     CL = 1 to use INT 2E
  8120.     CL <> 1 to use INT 21/AH=4Bh
  8121. SeeAlso: AX=9900h,AX=9901h,AX=9902h
  8122. --------l-2F9904-----------------------------
  8123. INT 2F U - DOS Navigator II v1.49 - SET ???
  8124.     AX = 9904h
  8125.     CX:DX = new value for ???
  8126. SeeAlso: AX=9900h,AX=9905h,AX=9906h
  8127. --------l-2F9905-----------------------------
  8128. INT 2F U - DOS Navigator II v1.49 - GET ???
  8129.     AX = 9905h
  8130. Return: CX:DX = current value of ??? (set by AX=9904h)
  8131. SeeAlso: AX=9900h,AX=9904h,AX=9906h
  8132. --------l-2F9906-----------------------------
  8133. INT 2F U - DOS Navigator II v1.49 - GET ???
  8134.     AX = 9906h
  8135.     DX = new value for ??? (bit 15 must be set, otherwise not changed)
  8136. Return: CX = previous value for ???
  8137. SeeAlso: AX=9900h,AX=9904h,AX=9905h
  8138. --------e-2F9C-------------------------------
  8139. INT 2F - Network Courier E-Mail OPERATOR.EXE - API
  8140.     AH = 9Ch
  8141.     AL = subfunction
  8142.         01h uninstall
  8143. Return: ???
  8144. Program: The Network Courier is an electronic mail package by Consumers
  8145.       Software of Vancouver, BC which was bought by Microsoft in 1991 and
  8146.       renamed Microsoft Mail v3.0.
  8147. SeeAlso: AH=92h
  8148. Index:    uninstall;Network Courier E-Mail OPERATOR.EXE
  8149. --------G-2F9E00-----------------------------
  8150. INT 2F U - INTMON v2.1 - INSTALLATION CHECK
  8151.     AX = 9E00h
  8152. Return: AX = FFFFh if installed
  8153.         BX = segment of resident code
  8154. Program: INTMON is a shareware interactive interrupt monitoring TSR for 386
  8155.       and higher machines by Celso Minnitti, Jr.
  8156. SeeAlso: AX=9E01h,AX=9E02h,AX=9E03h,AX=9F00h
  8157. --------G-2F9E01-----------------------------
  8158. INT 2F U - INTMON v2.1 - RESET
  8159.     AX = 9E01h
  8160. Return: ???
  8161. Desc:    this function specifies that INTMON should assume that any interrupts
  8162.       on which it is currently awaiting a return have completed (i.e.
  8163.       interrupts which never return such as INT 20 and INT 27)
  8164. SeeAlso: AX=9E00h,AX=9E03h
  8165. --------G-2F9E02-----------------------------
  8166. INT 2F U - INTMON v2.1 - DISPLAY CPU REGISTERS???
  8167.     AX = 9E02h
  8168. Return: ???
  8169. SeeAlso: AX=9E00h
  8170. --------G-2F9E03-----------------------------
  8171. INT 2F U - INTMON v2.1 - HOOK INTERRUPT???
  8172.     AX = 9E03h
  8173.     BH = interrupt number???
  8174. Return: ???
  8175. Note:    if AL > 03h on entry, INTMON 2.1 returns immediately
  8176. SeeAlso: AX=9E00h,AX=9E01h
  8177. --------G-2F9F00-----------------------------
  8178. INT 2F U - INTCFG v2.1 - INSTALLATION CHECK
  8179.     AX = 9F00h
  8180. Return: AX = FFFFh if installed
  8181. Program: INTCFG is an optionally-resident control program for INTMON by Celso
  8182.       Minnitti, Jr.
  8183. SeeAlso: AX=9E00h,AX=9F01h,AX=9F30h,AX=9F49h
  8184. --------G-2F9F01-----------------------------
  8185. INT 2F U - INTCFG v2.1 - ???
  8186.     AX = 9F01h
  8187.     ???
  8188. Return: ???
  8189. SeeAlso: AX=9F00h
  8190. --------G-2F9F30-----------------------------
  8191. INT 2F U - INTCFG v2.1 - GET ???
  8192.     AX = 9F30h
  8193. Return: AX = ??? (0002h)
  8194. SeeAlso: AX=9F00h
  8195. --------G-2F9F49-----------------------------
  8196. INT 2F U - INTCFG v2.1 - UNINSTALL
  8197.     AX = 9F49h
  8198. Return: AX,DX,DS,ES destroyed
  8199. SeeAlso: AX=9F00h
  8200. --------E-2FA1--BX0081-----------------------
  8201. INT 2F - Ergo DOS extenders - INSTALLATION CHECK
  8202.     AH = A1h
  8203.     BX = 0081h
  8204.     AL = which
  8205.         FEh OS/286,OS/386
  8206.         FFh HummingBoard DOS extender
  8207.     ES:DI -> 16-byte buffer
  8208. Return: if installed, first four bytes of ES:DI buffer are "IABH"
  8209. Note:    since TKERNEL is a licensed version, it is likely that subfunctions
  8210.       BX=0082h and BX=0084h are present and function identically to the
  8211.       AX=FBA1h/BX=008xh calls
  8212. SeeAlso: AX=ED00h,AX=FBA1h/BX=0081h,INT 15/AX=BF02h
  8213. --------m-2FA189-----------------------------
  8214. INT 2F U - Biologic HRAMDEV.SYS - API
  8215.     AX = A189h
  8216.     BX = subfunction
  8217.         0000h set ???
  8218.         0001h remove ???
  8219.         0002h get status ???
  8220.         0003h enable ???
  8221.         0004h disable ???
  8222.         0005h set ??? flag
  8223.         0006h clear ??? flag
  8224.         0007h set ??? flag
  8225.         0008h clear ??? flag
  8226.         0009h set ???
  8227.     ES:DI -> function-specific arguments
  8228.         if func 0000h: 20-byte buffer containing ???
  8229.         if func 0001h: 20-byte buffer for returned ???
  8230.         if func 0002h: 16-byte buffer for returned ???
  8231.         if func 0009h: WORD containing ???
  8232. Return: BX = A189h if installed
  8233.     AH = status
  8234.         00h successful
  8235.         FFh failed or invalid function number
  8236. Program: HRAMDEV.SYS is a part of the shareware package HRAM by Biologic which
  8237.       provides improved high memory access under MS-DOS 5.0
  8238. Note:    functions 00h and 01h use a stack of four entries; function 01h always
  8239.       removes the values stored with the most recent function 00h call
  8240.       which has not yet been matched with a function 01h call.
  8241. --------U-2FA4E0-----------------------------
  8242. INT 2F - Futurus Team - INSTALLATION CHECK
  8243.     AX = A4E0h
  8244. Return: AL = 52h ("R") if installed
  8245.         AH = major version plus 30h ("0")
  8246.         ES:BX -> ??? (INT A4 handler???)
  8247. Note:    older versions of Right Hand Man (from which Team evolved) store the
  8248.       signature "RH" at offset 103h in the INT 2F handler's segment
  8249. SeeAlso: INT A4"Right Hand Man"
  8250. --------U-2FA900-----------------------------
  8251. INT 2F - METZTSR.COM - INSTALLATION CHECK
  8252.     AX = A900h
  8253.     CF set
  8254. Return: CF clear if resident
  8255.         AX = 97FFh
  8256.     CF set if not present
  8257. Notes:    METZTSR.COM prevents METZ applications (such as the MAGIC screen
  8258.       saver) inactivity timeout while running a DOSapp under MS Windows.
  8259.     the default multiplex number is A9h, but may be set to any value from
  8260.       80h to FFh with a commandline switch
  8261. SeeAlso: AX=A901h,AX=A902h
  8262. --------U-2FA901-----------------------------
  8263. INT 2F - METZTSR.COM - GET TIME OF LAST KEYBOARD ACTIVITY
  8264.     AX = A901h
  8265.     CF set
  8266. Return: CF clear if successful
  8267.         AX:DX = BIOS time at which INT 09 was last invoked
  8268.     CF set if not present
  8269. SeeAlso: INT 09,INT 1A/AH=00h
  8270. --------U-2FA902-----------------------------
  8271. INT 2F - METZTSR.COM - SET METZ Ctrl-Alt-Del FLAG
  8272.     AX = A902h
  8273.     BL = new value
  8274.         00h Ctrl-Alt-Del not allowed
  8275.         else Ctrl-Alt-Del allowed (startup default is 01h)
  8276.     CF set
  8277. Return: CF clear if successful
  8278.         AX = 97FFh
  8279.     CF set if not resident
  8280. SeeAlso: AX=A903h
  8281. --------U-2FA903-----------------------------
  8282. INT 2F - METZTSR.COM - GET METZ Ctrl-Alt-Del FLAG
  8283.     AX = A903h
  8284.     CF set
  8285. Return: CF clear if successful
  8286.         AX = 97FFh if Ctrl-Alt-Del allowed
  8287.         AX = 0000h if Ctrl-Alt-Del not allowed
  8288.     CF set if not resident
  8289. SeeAlso: AX=A902h
  8290. --------U-2FAA-------------------------------
  8291. INT 2F - Player's Tool 3.996b+ - UNINSTALL
  8292.     AH = AAh
  8293. Return: AL = status
  8294.         00h unloaded successfully
  8295.         01h unable to unload: in DOS shell
  8296. Program: Player's Tool is a game cheater by Dima Yakunin & Andy Robinson
  8297. SeeAlso: AH=ABh"Player's Tool",AH=ACh"Player's Tool",INT 10/AH=AAh
  8298. --------U-2FAA00-----------------------------
  8299. INT 2F - VIDCLOCK.COM - INSTALLATION CHECK
  8300.     AX = AA00h
  8301. Return: AL = 00h not installed
  8302.          FFh installed
  8303. Program: VIDCLOCK.COM is a memory-resident clock by Thomas G. Hanlin III
  8304. --------U-2FAB-------------------------------
  8305. INT 2F - Player's Tool 3.996b+ - INSTALLATION CHECK
  8306.     AH = ABh
  8307. Return: BH = FFh if installed
  8308.         BL = DOS shell state
  8309.         01h in DOS shell
  8310.         00h not in DOS shell
  8311. SeeAlso: AH=AAh"Player's Tool",AH=ACh"Player's Tool",INT 10/AH=ABh
  8312. --------f-2FAB00-----------------------------
  8313. INT 2F - Btrieve Multi-User - INSTALLATION CHECK
  8314.     AX = AB00h
  8315. Return: AL = 4Dh if installed
  8316. SeeAlso: AX=AB01h,AX=AB02h,INT 7B"Btrieve"
  8317. ----------2FAB00-----------------------------
  8318. INT 2F - SRSoft MODAL PC v2+ - INSTALLATION CHECK / GET VERSION
  8319.     AX = AB00h
  8320. Return: AX = 5253h ('SR' byte-swapped) if installed
  8321.         BX = MODAL PC version (BL = major, BH = minor)
  8322. Program: MODAL PC is an algorithm/real-system simulation package by SR Soft
  8323.       using Petri-nets to describe simulated objects
  8324. SeeAlso: AX=AB01h"MODAL",AX=AB02h"MODAL",AX=AB06h"MODAL"
  8325. --------f-2FAB01-----------------------------
  8326. INT 2F - Btrieve Multi-User - EXECUTE Btrieve OPERATION
  8327.     AX = AB01h
  8328.     BX = process ID
  8329.     DS:DX -> 38-byte parameter record (see #3472 at INT 7B"Btrieve")
  8330. Return: AL = status
  8331.         00h OK
  8332.         other retry after calling INT 7F/AX=0200h
  8333. SeeAlso: AX=AB00h"Btrieve",AX=AB02h"Btrieve",INT 7B"Btrieve",INT 7F/AX=0200h
  8334. ----------2FAB01-----------------------------
  8335. INT 2F - SRSoft MODAL PC v2+ - GET PROCESS RUN PARAMETER
  8336.     AX = AB01h
  8337. Return: AX = 5253h ('SR' byte-swapped) if installed
  8338.     BL = run parameter
  8339.         00h normal process
  8340.         01h run with tracing enabled
  8341.         02h run initialization process (first thread of main task)
  8342. SeeAlso: AX=AB00h"MODAL",AX=AB02h"MODAL"
  8343. --------f-2FAB02-----------------------------
  8344. INT 2F - Btrieve Multi-User - GET NEW PROCESS ID
  8345.     AX = AB02h
  8346. Return: AL = 00h successful
  8347.         BX = process ID
  8348.     AL > 00h failed, retry after calling INT 7F/AX=0200h
  8349. SeeAlso: AX=AB00h,AX=AB01h,INT 7B"Btrieve",INT 7F/AX=0200h
  8350. ----------2FAB02-----------------------------
  8351. INT 2F - SRSoft MODAL PC v2+ - SET PROCESS EXIT CODE
  8352.     AX = AB02h
  8353.     BL = exit code
  8354. Return: AX = 5253h ('SR' byte-swapped) if installed
  8355. SeeAlso: AX=AB00h"MODAL",AX=AB01h"MODAL",AX=AB03h"MODAL"
  8356. ----------2FAB03-----------------------------
  8357. INT 2F - SRSoft MODAL PC v2+ - ALLOCATE COMMON MEMORY
  8358.     AX = AB03h
  8359.     BX = required size of common memory for variables/semaphores in bytes
  8360. Return: AX = 5253h ('SR' byte-swapped) if installed
  8361. SeeAlso: AX=AB00h"MODAL",AX=AB02h"MODAL",AX=AB04h"MODAL"
  8362. ----------2FAB04-----------------------------
  8363. INT 2F - SRSoft MODAL PC v2+ - GET ALL COMMON VARIABLES AND SEMAPHORES
  8364.     AX = AB04h
  8365.     DS:DX -> buffer for common data
  8366. Return: AX = 5253h ('SR' byte-swapped) if installed
  8367.     CF clear if successful
  8368.     CF set on error
  8369. SeeAlso: AX=AB00h"MODAL",AX=AB03h"MODAL",AX=AB05h"MODAL",AX=AB06h,AX=AB07h
  8370. ----------2FAB05-----------------------------
  8371. INT 2F - SRSoft MODAL PC v2+ - SET ALL COMMON VARIABLES AND SEMAPHORES
  8372.     AX = AB05h
  8373.     DS:DX -> buffer containing common data
  8374. Return: AX = 5253h ('SR' byte-swapped) if installed
  8375.     CF clear if successful
  8376.     CF set on error
  8377. SeeAlso: AX=AB00h"MODAL",AX=AB03h"MODAL",AX=AB04h"MODAL",AX=AB06h,AX=AB07h
  8378. ----------2FAB06-----------------------------
  8379. INT 2F - SRSoft MODAL PC v2+ - GET A COMMON VARIABLE OR SEMAPHORE
  8380.     AX = AB06h
  8381.     BX = offset of variable or semaphore in common memory
  8382.     CX = variable/semaphore size in bytes
  8383.     DS:DX -> buffer for variable or semaphore
  8384. Return: AX = 5253h ('SR' byte-swapped) if installed
  8385.     CF clear if successful
  8386.     CF set on error
  8387. SeeAlso: AX=AB00h"MODAL",AX=AB04h,AX=AB05h,AX=AB07h
  8388. ----------2FAB07-----------------------------
  8389. INT 2F - SRSoft MODAL PC v2+ - SET A COMMON VARIABLE OR SEMAPHORE
  8390.     AX = AB07h
  8391.     BX = offset of variable or semaphore in common memory
  8392.     CX = variable/semaphore size in bytes
  8393.     DS:DX -> buffer containing variable or semaphore
  8394. Return: AX = 5253h ('SR' byte-swapped) if installed
  8395.     CF clear if successful
  8396.     CF set on error
  8397. SeeAlso: AX=AB00h"MODAL",AX=AB04h,AX=AB05h,AX=AB06h
  8398. --------U-2FAC-------------------------------
  8399. INT 2F u - Player's Tool 3.996b+ - POP UP
  8400.     AH = ACh
  8401. Return: AX = 1001h
  8402. SeeAlso: AH=AAh"Player's Tool",AH=ABh"Player's Tool"
  8403. --------V-2FAC00-----------------------------
  8404. INT 2F - DOS 4.01+ GRAPHICS.COM - INSTALLATION CHECK
  8405.     AX = AC00h
  8406. Return: AX = FFFFh
  8407.     ES:DI -> ??? (graphics data?) (not documented)
  8408. Note:    this installation check was moved here to avoid the conflict with the
  8409.       CD-ROM extensions that occurred in DOS 4.00
  8410. SeeAlso: AX=1500h"GRAPHICS"
  8411. --------V-2FAC00DI1092-----------------------
  8412. INT 2F - QRIP/TSR - GIVE CPU TO QRIP
  8413.     AX = AC00h
  8414.     DI = 1092h
  8415. Return: nothing
  8416. Program: QRIP/TSR is a shareware TSR by Shane Hathaway implementing the Remote
  8417.       Imaging Protocol (RIP, RIPscrip) used by several BBS systems to
  8418.       provide a graphical user interface
  8419. Desc:    give QRIP some CPU time to update music and flashing timers
  8420. Notes:    if DI <> 1092h on entry, QRIP chains the call
  8421.     this function should be called regularly whenever the terminal program
  8422.       is otherwise idle; the updates are automatically performed on any
  8423.       other QRIP call
  8424. SeeAlso: AX=AC01h,AX=ACF0h
  8425. --------V-2FAC01DI1092-----------------------
  8426. INT 2F - QRIP/TSR - CHANGE INTERNAL FLAGS
  8427.     AX = AC01h
  8428.     DI = 1092h
  8429.     BX = flags to be turned on (see #2612)
  8430.     CX = flags to be turned off (see #2612)
  8431. Return: AX = 9142h if installed
  8432.         DX = DOS-takeover flag (nonzero if QRIP able to take over DOS)
  8433.         ---if DX nonzero---
  8434.         BX = QRIP version number in hex (BH = major, BL = minor)
  8435.         CX = new flags (see #2612)
  8436. Note:    if DI <> 1092h on entry, QRIP chains the call
  8437. SeeAlso: AX=AC00h/DI=1092h,AX=ACF0h
  8438.  
  8439. Bitfields for QRIP internal flags:
  8440. Bit(s)    Description    (Table 2612)
  8441.  0    ANSI emulation enabled (default on)
  8442.  1    RIP emulation enabled (default on)
  8443.  2    graphical commands allowed (default on)
  8444.  3    TTY text allowed (default on)
  8445.  4    disable @ variables (default off in TSR mode)
  8446.  5    wait for key on RIP "end scene" command (default off)
  8447.  6    anti-stripping (default off in TSR mode)
  8448.  7    sound enabled (default on)
  8449.  8    automatic message filter (default off in TSR mode)
  8450.  9    display-only mode (no user prompts)
  8451.  10    TTY text suppression (default off in TSR mode)
  8452.  11-15    reserved
  8453. --------V-2FAC02DI1092-----------------------
  8454. INT 2F - QRIP/TSR - TURN OFF GRAPHICS SCREEN
  8455.     AX = AC02h
  8456.     DI = 1092h
  8457. Return: nothing
  8458. Note:    if DI <> 1092h on entry, QRIP chains the call
  8459. SeeAlso: AX=AC03h,AX=ACF0h
  8460. --------V-2FAC03DI1092-----------------------
  8461. INT 2F - QRIP/TSR - TURN ON GRAPHICS SCREEN
  8462.     AX = AC03h
  8463.     DI = 1092h
  8464. Return: nothing
  8465. Notes:    if DI <> 1092h on entry, QRIP chains the call
  8466.     this function does not restore the contents of the screen (see AX=AC15h)
  8467. SeeAlso: AX=AC02h,AX=AC14h,AX=AC15h
  8468. --------V-2FAC04DI1092-----------------------
  8469. INT 2F - QRIP/TSR - OUTPUT STRING THROUGH QRIP
  8470.     AX = AC04h
  8471.     DI = 1092h
  8472.     DX:BX -> string
  8473.     CX = length of string
  8474. Return: nothing
  8475. Note:    if DI <> 1092h on entry, QRIP chains the call
  8476. SeeAlso: AX=AC05h,AX=AC09h,AX=AC0Ah,AX=ACF0h
  8477. --------V-2FAC05DI1092-----------------------
  8478. INT 2F - QRIP/TSR - OUTPUT NULL-TERMINATED STRING THROUGH QRIP
  8479.     AX = AC05h
  8480.     DI = 1092h
  8481.     DX:BX -> ASCIZ string
  8482. Return: nothing
  8483. Note:    if DI <> 1092h on entry, QRIP chains the call
  8484. SeeAlso: AX=AC04h,AX=AC06h,AX=AC09h,AX=AC0Ah,AX=ACF0h
  8485. --------V-2FAC06DI1092-----------------------
  8486. INT 2F - QRIP/TSR - RECEIVE CHARACTERS FROM QRIP
  8487.     AX = AC06h
  8488.     DI = 1092h
  8489. Return: AX = character to send to BBS (0001h-00FFh) or special code (see #2613)
  8490.     BX = string-waiting flag
  8491.         0001h entire string waiting to be sent to terminal (call AX=AC0Ch)
  8492.     CX = DX = AX
  8493. Note:    if DI <> 1092h on entry, QRIP chains the call
  8494. SeeAlso: AX=AC04h,AX=AC05h,AX=AC0Ch,AX=AC16h,AX=AC18h,AX=AC1Ah
  8495.  
  8496. (Table 2613)
  8497. Values for QRIP special codes:
  8498.  0000h    if none
  8499.  0100h    wait for user keypress (must call AX=AC16h/BL=00h or AX=AC18h)
  8500.  0101h    both/middle mouse button pressed
  8501.  0102h    entering block mode (up/download) (call AX=AC1Ah)
  8502.  0103h    right mouse button pressed
  8503.  0104h    BBS requested status bar on
  8504.  0105h    BBS requested status bar off
  8505.  0106h    BBS requested VT-102 terminal emulation
  8506.     (keypad keys should send VT-102 escape codes)
  8507.  0107h    BBS requested VT-102 mode off
  8508.  0108h    BBS requested doorway mode (raw IBM keyboard ASCII/scan code pairs)
  8509.  0109h    BBS requested doorway mode off
  8510.  010Ah    hotkey mode on
  8511.  010Bh    hotkey mode off
  8512.  010Ch    BBS requested Tab-key button changing on
  8513.  010Dh    BBS requested Tab-key mode off
  8514.  010Eh    XOFF (use flow control to stop incoming characters)
  8515.  010Fh    XON (use flow control to resume incoming characters)
  8516.  0110h-0119h BBS requested application (0-9) be run
  8517.     application 0 should be a standard text editor
  8518.  01FFh    send ASCII 00h to BBS
  8519. Note:    for special codes 0104h to 010Dh, the terminal program should report
  8520.       any mode changes it make in response by calling AX=AC16h
  8521. --------V-2FAC07DI1092-----------------------
  8522. INT 2F - QRIP/TSR - GET FONT DIRECTORY
  8523.     AX = AC07h
  8524.     DI = 1092h
  8525. Return: DX:BX -> 80-byte internal buffer containing ASCIZ font directory name
  8526. Notes:    if DI <> 1092h on entry, QRIP chains the call
  8527.     the application may change the font directory by overwriting the
  8528.       returned buffer, ensuring that it does not exceed 80 bytes incl. NUL
  8529.     if changed, the new path will not become effective until the graphics
  8530.       screen is reinitialized
  8531. SeeAlso: AX=AC08h,AX=ACF0h
  8532. --------V-2FAC08DI1092-----------------------
  8533. INT 2F - QRIP/TSR - GET ICON DIRECTORY
  8534.     AX = AC08h
  8535.     DI = 1092h
  8536. Return: DX:BX -> 80-byte internal buffer containing ASCIZ icon directory name
  8537. Notes:    if DI <> 1092h on entry, QRIP chains the call
  8538.     the application may change the icon directory by overwriting the
  8539.       returned buffer, ensuring that it does not exceed 80 bytes incl. NUL,
  8540.       and includes a trailing backslash
  8541.     if changed, the new path becomes effective immediately
  8542. SeeAlso: AX=AC07h,AX=ACF0h
  8543. --------V-2FAC09DI1092-----------------------
  8544. INT 2F - QRIP/TSR - OUTPUT STRING THROUGH QRIP
  8545.     AX = AC09h
  8546.     DI = 1092h
  8547.     DX:BX -> string
  8548.     CX = length of string
  8549. Return: AX = character to send to BBS (0001h-00FFh) or special code (see #2613)
  8550.     BX = string-waiting flag
  8551.         0001h entire string waiting to be sent to terminal (call AX=AC0Ch)
  8552.     CX = DX = AX
  8553. Note:    if DI <> 1092h on entry, QRIP chains the call
  8554. SeeAlso: AX=AC04h,AX=AC06h,AX=AC0Ah,AX=ACF0h
  8555. --------V-2FAC0ADI1092-----------------------
  8556. INT 2F - QRIP/TSR - OUTPUT NULL-TERMINATED STRING THROUGH QRIP
  8557.     AX = AC0Ah
  8558.     DI = 1092h
  8559.     DX:BX -> ASCIZ string
  8560. Return: AX = character to send to BBS (0001h-00FFh) or special code (see #2613)
  8561.     BX = string-waiting flag
  8562.         0001h entire string waiting to be sent to terminal (call AX=AC0Ch)
  8563.     CX = DX = AX
  8564. Note:    if DI <> 1092h on entry, QRIP chains the call
  8565. SeeAlso: AX=AC05h,AX=AC06h,AX=AC09h,AX=ACF0h
  8566. --------V-2FAC0BDI1092-----------------------
  8567. INT 2F - QRIP/TSR - EXECUTE RIP "END SCENE" COMMAND
  8568.     AX = AC0Bh
  8569.     DI = 1092h
  8570. Return: nothing
  8571. Notes:    if DI <> 1092h on entry, QRIP chains the call
  8572.     enables all mouse buttons and cancels the RIP timeout
  8573. SeeAlso: AX=AC01h,AX=AC04h,AX=ACF0h
  8574. --------V-2FAC0CDI1092-----------------------
  8575. INT 2F - QRIP/TSR - GET STRING TO BE SENT TO BBS
  8576.     AX = AC0Ch
  8577.     DI = 1092h
  8578. Return: AX = status
  8579.         0000h nothing to be sent
  8580.         0001h a string is waiting to be sent
  8581.         DX:BX -> string to be sent (may contain NULs)
  8582.         CX = length of string
  8583.         0002h special code waiting (call AX=AC06h)
  8584. Note:    if DI <> 1092h on entry, QRIP chains the call
  8585. SeeAlso: AX=AC06h,AX=ACF0h
  8586. --------V-2FAC0DDI1092-----------------------
  8587. INT 2F - QRIP/TSR - SET PROTECTED SCREEN AREA
  8588.     AX = AC0Dh
  8589.     DI = 1092h
  8590.     CL = number of text lines at bottom of screen to protect (00h = off)
  8591.     BL = attribute with which to fill area (bit 7 = high-int. background)
  8592. Return: nothing
  8593. Note:    if DI <> 1092h on entry, QRIP chains the call
  8594. SeeAlso: AX=AC0Eh,AX=AC0Fh,AX=AC10h,AX=ACF0h
  8595. --------V-2FAC0EDI1092-----------------------
  8596. INT 2F - QRIP/TSR - WRITE ASCIZ STRING IN PROTECTED AREA
  8597.     AX = AC0Eh
  8598.     DI = 1092h
  8599.     DX:BX -> ASCIZ string to be written
  8600.     CL = column at which to begin writing
  8601.     CH = row number within protected area (00h = first line)
  8602. Return: nothing
  8603. Note:    if DI <> 1092h on entry, QRIP chains the call
  8604. SeeAlso: AX=AC0Dh,AX=AC0Fh,AX=AC10h,AX=ACF0h
  8605. --------V-2FAC0FDI1092-----------------------
  8606. INT 2F - QRIP/TSR - SCROLL PROTECTED AREA
  8607.     AX = AC0Fh
  8608.     DI = 1092h
  8609.     BH,BL = row,column of upper-left corner in protected area
  8610.     DH,DL = row,column of lower-right corner
  8611.     CL = number of lines to scroll up
  8612. Return: nothing
  8613. Note:    if DI <> 1092h on entry, QRIP chains the call
  8614. SeeAlso: AX=AC0Dh,AX=AC0Eh,AX=AC10h,AX=ACF0h
  8615. --------V-2FAC10DI1092-----------------------
  8616. INT 2F - QRIP/TSR - SET OUTPUT COLOR FOR PROTECTED AREA
  8617.     AX = AC10h
  8618.     DI = 1092h
  8619.     BL = new attribute (bit 7 set for high-intensity background)
  8620. Return: nothing
  8621. Note:    if DI <> 1092h on entry, QRIP chains the call
  8622. SeeAlso: AX=AC0Dh,AX=AC0Eh,AX=AC0Fh,AX=AC11h,AX=ACF0h
  8623. --------V-2FAC11DI1092-----------------------
  8624. INT 2F - QRIP/TSR - CONVERT PROTECTED AREA TO ENTIRE SCREEN
  8625.     AX = AC11h
  8626.     DI = 1092h
  8627.     BX = mode (0000h = normal protect, 0001h = allow full-screen access)
  8628. Note:    if DI <> 1092h on entry, QRIP chains the call
  8629. SeeAlso: AX=AC0Dh,AX=AC0Eh,AX=AC0Fh,AX=AC10h,AX=AC12h,AX=ACF0h
  8630. --------V-2FAC12DI1092-----------------------
  8631. INT 2F - QRIP/TSR - BEGIN POPUP-WINDOW MODE
  8632.     AX = AC12h
  8633.     DI = 1092h
  8634. Return: nothing
  8635. Notes:    if DI <> 1092h on entry, QRIP chains the call
  8636.     while popup-mode is in effect, the terminal program can write to the
  8637.       screen (and easily restore it) by outputting a RIP file with AX=AC04h
  8638.       or AX=AC05h
  8639.     QRIP will automatically drop out of popup-window mode if the terminal
  8640.       program invokes RIP pick-lists
  8641.     any changes to the protected area will be restored when popup-window
  8642.       mode is cancelled
  8643. SeeAlso: AX=AC04h,AX=AC11h,AX=AC13h,AX=ACF0h
  8644. --------V-2FAC13DI1092-----------------------
  8645. INT 2F - QRIP/TSR - END POPUP-WINDOW MODE
  8646.     AX = AC13h
  8647.     DI = 1092h
  8648. Return: nothing
  8649. Notes:    if DI <> 1092h on entry, QRIP chains the call
  8650.     restores screen
  8651. SeeAlso: AX=AC12h,AX=ACF0h
  8652. --------V-2FAC14DI1092-----------------------
  8653. INT 2F - QRIP/TSR - SAVE GRAPHICS SCREEN AND SWITCH TO TEXT MODE
  8654.     AX = AC14h
  8655.     DI = 1092h
  8656. Return: nothing
  8657. Note:    if DI <> 1092h on entry, QRIP chains the call
  8658. SeeAlso: AX=AC03h,AX=AC15h
  8659. --------V-2FAC15DI1092-----------------------
  8660. INT 2F - QRIP/TSR - RESTORE GRAPHICS SCREEN
  8661.     AX = AC15h
  8662.     DI = 1092h
  8663. Return: nothing
  8664. Desc:    restores the graphics screen saved by the last call to AX=AC14h
  8665. Note:    if DI <> 1092h on entry, QRIP chains the call
  8666. SeeAlso: AX=AC03h,AX=AC14h
  8667. --------V-2FAC16DI1092-----------------------
  8668. INT 2F - QRIP/TSR - REPORT MODE CHANGE TO QRIP
  8669.     AX = AC16h
  8670.     DI = 1092h
  8671.     BL = new mode
  8672.         00h terminate key wait
  8673.         01h status bar on
  8674.         02h status bar off
  8675.         03h VT-102 mode on
  8676.         04h VT-102 mode off
  8677.         05h doorway mode on
  8678.         06h doorway mode off
  8679.         07h hotkeys mode on
  8680.         08h hotkeys mode off
  8681.         09h tabkey mode on
  8682.         0Ah tabkey mode off
  8683. Return: nothing
  8684. Notes:    if DI <> 1092h on entry, QRIP chains the call
  8685.     all modes default to OFF when QRIP is first installed
  8686. --------V-2FAC17DI1092-----------------------
  8687. INT 2F - QRIP/TSR - CALL (EXECUTE) A RIP FILE
  8688.     AX = AC17h
  8689.     DI = 1092h
  8690.     DX:BX -> ASCIZ filename for RIP file to be executed
  8691. Return: nothing
  8692. Notes:    if DI <> 1092h on entry, QRIP chains the call
  8693.     the specified file may be in the current icon directory, the QRIP
  8694.       startup directory, or the current directory; any pathnames specified
  8695.       with the filename are ignored
  8696. --------V-2FAC18DI1092-----------------------
  8697. INT 2F - QRIP/TSR - SEND USER KEY TO QRIP
  8698.     AX = AC18h
  8699.     DI = 1092h
  8700.     BX = key (00xxh is normal ASCII, xx00h is an extended key)
  8701. Return: nothing
  8702. Note:    if DI <> 1092h on entry, QRIP chains the call
  8703. SeeAlso: AX=AC06h,AX=ACF0h
  8704. --------V-2FAC19DI1092-----------------------
  8705. INT 2F - QRIP/TSR - HANGUP
  8706.     AX = AC19h
  8707.     DI = 1092h
  8708. Return: nothing
  8709. Desc:    inform QRIP that carrier has been lost
  8710. Note:    if DI <> 1092h on entry, QRIP chains the call
  8711. SeeAlso: AX=ACF0h
  8712. --------V-2FAC1ADI1092-----------------------
  8713. INT 2F - QRIP/TSR - GET RIP_ENTER_BLOCK_MODE INFORMATION
  8714.     AX = AC1Ah
  8715.     DI = 1092h
  8716. Return: AH = requested protocol (see #2614)
  8717.     AL = file type (see #2615)
  8718.     DX:BX -> ASCIZ filename or 0000h:0000h
  8719.     CX = length of filename
  8720. Note:    if DI <> 1092h on entry, QRIP chains the call
  8721. SeeAlso: AX=ACF0h
  8722.  
  8723. (Table 2614)
  8724. Values for QRIP protocol identifier:
  8725.  00h    Xmodem (checksum)
  8726.  01h    Xmodem-CRC
  8727.  02h    Xmodem-1K
  8728.  03h    Xmodem-1K-G
  8729.  04h    Kermit
  8730.  05h    Ymodem
  8731.  06h    Ymodem-G
  8732.  07h    Zmodem with crash recovery
  8733.  08h-0Fh same as 00h-07h, but for uploading instead of downloading
  8734. SeeAlso: #2615
  8735.  
  8736. (Table 2615)
  8737. Values for QRIP file type:
  8738.  00h    RIP file sequence to be displayed
  8739.  01h    RIP file sequence to be stored in icon directory
  8740.  02h    ICN file sequence to be stored in icon directory
  8741.  03h    HLP file sequence to be stored, then auto-loaded if needed
  8742.  04h    COMPOSITE DYNAMIC file sequence (batch protocols only)
  8743.  05h    ACTIVE DYNAMIC file sequence (batch protocols only)
  8744. Note:    for file types 04h and 05h, any .RIP or .ICN files are stored in
  8745.       the icon directory; in mode 05h, any .RIP files are also played
  8746.       back as they are received
  8747. SeeAlso: #2614
  8748. --------V-2FAC1BDI1092-----------------------
  8749. INT 2F - QRIP/TSR - SET SYSTEM FONT SIZE
  8750.     AX = AC1Bh
  8751.     DI = 1092h
  8752.     BX = font size (see #2616)
  8753. Return: nothing
  8754. Note:    if DI <> 1092h on entry, QRIP chains the call
  8755. SeeAlso: AX=AC04h,AX=ACF0h
  8756.  
  8757. (Table 2616)
  8758. Values for QRIP font size specifier:
  8759.  00h    8x8 font, 80x43 screen
  8760.  01h    7x8 font, 90x43 screen
  8761.  02h    8x14 font, 80x25 screen
  8762.  03h    7x14 font, 90x25 screen
  8763.  04h    16x14 font, 40x25 screen
  8764. --------V-2FACF0DI1092-----------------------
  8765. INT 2F - QRIP/TSR - INSTALLATION CHECK
  8766.     AX = ACF0h
  8767.     DI = 1092h
  8768. Return: AX = 9142h if installed
  8769.         DX = DOS-takeover flag (nonzero if QRIP able to take over DOS)
  8770.         ---if DX nonzero---
  8771.         BX = QRIP version number in hex (BH = major, BL = minor)
  8772.         CX = current flags (see AX=AC01h)
  8773. Note:    if DI <> 1092h on entry, QRIP chains the call
  8774. SeeAlso: AX=AC00h/DI=1092h,AX=AC01h,AX=AC04h,AX=AC06h,AX=AC1Ah,AX=ACFFh
  8775. --------V-2FACFFDI1092-----------------------
  8776. INT 2F - QRIP/TSR - UNINSTALL
  8777.     AX = ACFFh
  8778.     DI = 1092h
  8779. Return: AX = status
  8780.         0000h unable to remove (interrupt vector hooked by another prog)
  8781.         0001h successful
  8782.         0002h unable to take over DOS at this time (retry uninstall)
  8783. Note:    if DI <> 1092h on entry, QRIP chains the call
  8784. SeeAlso: AX=ACF0h
  8785. --------V-2FAD00-----------------------------
  8786. INT 2F U - DOS 3.3+ DISPLAY.SYS internal - INSTALLATION CHECK
  8787.     AX = AD00h
  8788. Return: AL = FFh if installed
  8789.         BX = ??? (0100h for MS-DOS 3.3+)
  8790. Note:    DOS 5+ DISPLAY.SYS chains to previous handler if AL is not one of the
  8791.       subfunctions listed here
  8792. SeeAlso: AX=AD01h"DISPLAY",AX=AD02h"DISPLAY"
  8793. --------O-2FAD00-----------------------------
  8794. INT 2F U - DR DOS 3.41-5.0, Novell DOS 7 KEYB - INSTALLATION CHECK
  8795.     AX = AD00h
  8796. Return: AX = FFFFh if installed
  8797.     flags destroyed
  8798. SeeAlso: AX=AD80h"Novell"
  8799. --------V-2FAD01-----------------------------
  8800. INT 2F U - DOS 3.3+ DISPLAY.SYS internal - SET ACTIVE CODE PAGE
  8801.     AX = AD01h
  8802.     BX = new code page (see #1411 at INT 21/AX=6602h)
  8803. Return: CF clear if successful
  8804.         AX = 0001h
  8805.     CF set on error (unsupported code page)
  8806.         AX = 0000h
  8807. SeeAlso: AX=AD02h"DISPLAY"
  8808. --------O-2FAD01-----------------------------
  8809. INT 2F U - DR DOS 3.41,5.0 KEYB - GET CONFIGURATION
  8810.     AX = AD01h
  8811. Return: BX = current code page (see #1411 at INT 21/AX=6602h)
  8812.     CX = current keyboard layout (0100h = US, 0102h = foreign)
  8813.     ES = resident code segment
  8814. SeeAlso: AX=AD00h"KEYB",AX=AD02h"KEYB",AX=AD83h"KEYB"
  8815. --------V-2FAD02-----------------------------
  8816. INT 2F U - DOS 3.3+ DISPLAY.SYS internal - GET ACTIVE CODE PAGE
  8817.     AX = AD02h
  8818. Return: CF set if code page never set
  8819.         AX = 0001h
  8820.         BX = FFFFh (assume first hardware code page)
  8821.     CF clear if successful
  8822.         BX = current code page (see #1411 at INT 21/AX=6602h)
  8823. SeeAlso: AX=AD01h"DISPLAY",AX=AD03h
  8824. --------O-2FAD02-----------------------------
  8825. INT 2F U - Novell DOS 7 KEYB - ???
  8826.     AX = AD02h
  8827.     DX = ??? (0000h)
  8828. Return: AX = FFFFh if installed
  8829.     flags destroyed
  8830. SeeAlso: AX=AD01h"KEYB"
  8831. --------V-2FAD03-----------------------------
  8832. INT 2F U - DOS 3.3+ DISPLAY.SYS internal - GET CODE PAGE INFORMATION
  8833.     AX = AD03h
  8834.     ES:DI -> buffer for code page information (see #2617)
  8835.     CX = size of buffer in bytes
  8836. Return: CF set if buffer too small
  8837.     CF clear if successful
  8838.         ES:DI buffer filled
  8839. SeeAlso: AX=AD01h,AX=AD02h
  8840.  
  8841. Format of DOS 5.0-6.0 DISPLAY.SYS code page information:
  8842. Offset    Size    Description    (Table 2617)
  8843.  00h    WORD    number of software code pages
  8844.  02h    WORD    ??? (0003h)
  8845.  04h    WORD    number of hardware code pages
  8846.  06h  N WORDs    hardware code page numbers (see #1411 at INT 21/AX=6602h)
  8847.       N WORDs    software (prepared) code pages (FFFFh if not yet prepared)
  8848. --------V-2FAD04-----------------------------
  8849. INT 2F U - DOS 4.x only DISPLAY.SYS internal - ???
  8850.     AX = AD04h
  8851.     ???
  8852. Return: ???
  8853. --------V-2FAD10-----------------------------
  8854. INT 2F U - DOS 4.x DISPLAY.SYS internal - INSTALLATION CHECK???
  8855.     AX = AD10h
  8856.     ???
  8857. Return: AX = FFFFh
  8858.     BX = ??? (0100h in PC-DOS 4.01)
  8859. --------V-2FAD10-----------------------------
  8860. INT 2F U - DOS 5+ DISPLAY.SYS internal - ???
  8861.     AX = AD10h
  8862.     ???
  8863. Return: CF clear if successful
  8864.     CF set on error
  8865. Note:    this function is a NOP if the active code page has never been set
  8866.       (AX=AD02h returns BX=FFFFh); its purpose otherwise is not known
  8867. --------V-2FAD40-----------------------------
  8868. INT 2F - DOS 4.0+ - ???
  8869.     AX = AD40h
  8870.     DX = ???
  8871.     ???
  8872. Return: ???
  8873. Note:    called by PC-DOS 4.01 PRINT.COM
  8874. --------K-2FAD80-----------------------------
  8875. INT 2F u - MS-DOS 3.3+ KEYB.COM internal - INSTALLATION CHECK
  8876.     AX = AD80h
  8877. Return: AL = FFh if installed
  8878.         BX = version number (BH = major, BL = minor)
  8879.         ES:DI -> internal data (see #2618)
  8880.         AH destroyed (set to FFh by some implementations/versions)
  8881. Notes:    MS-DOS 3.30, PC-DOS 4.01, and MS-DOS 5.00 all report version 1.00.
  8882.     this function was undocumented prior to the release of DOS 5.0
  8883. SeeAlso: AX=AD80h"Novell",AX=AD81h,AX=AD82h,AX=AD83h
  8884.  
  8885. Format of KEYB internal data:
  8886. Offset    Size    Description    (Table 2618)
  8887.  00h    DWORD    original INT 09
  8888.  04h    DWORD    original INT 2F
  8889.  08h  6 BYTEs    ???
  8890.  0Eh    WORD    flags (see #2619)
  8891.  10h    BYTE    ???
  8892.  11h    BYTE    ???
  8893.  12h  4 BYTEs    ???
  8894.  16h  2 BYTEs    country ID letters
  8895.  18h    WORD    current code page (see #1411 at INT 21/AX=6602h)
  8896. ---DOS 3.3---
  8897.  1Ah    WORD    pointer to first item in list of code page tables???
  8898.  1Ch    WORD    pointer to ??? item in list of code page tables
  8899.  1Eh  2 BYTEs    ???
  8900.  20h    WORD    pointer to key translation data (see #2621)
  8901.  22h    WORD    pointer to last item in code page table list (see #2620)
  8902.  24h  9 BYTEs    ???
  8903. ---DOS 4.01---
  8904.  1Ah  2 BYTEs    ???
  8905.  1Ch    WORD    pointer to first item in list of code page tables???
  8906.  1Eh    WORD    pointer to ??? item in list of code page tables
  8907.  20h  2 BYTEs    ???
  8908.  22h    WORD    pointer to key translation data (see #2621)
  8909.  24h    WORD    pointer to last item in code page table list (see #2620)
  8910.  26h  9 BYTEs    ???
  8911. Note:    at least in MS-DOS v6.22, the signature "SHARED DATA" immediately
  8912.       precedes this structure
  8913.  
  8914. Bitfields for MS-DOS v6.22 KEYB flags:
  8915. Bit(s)    Description    (Table 2619)
  8916.  15    INT 16/AH=1xh supported (INT 16h/AH=92h call returns AH<=80h)
  8917.  14    INT 16/AH=2xh supported (INT 16h/AH=A2h call returns AH<=80h)
  8918.  13    unused (0)
  8919.  12    network installed (INT 2F/AX=B800h)
  8920.  11    original IBM PC (BIOS date 1981)
  8921.  10    PC or PC/XT (BIOS machine type byte of FBh or FEh)
  8922.  9    PC Convertible (BIOS machine type byte of F9h); use INT 15/AX=4104h
  8923.  8    unused (0)
  8924.  7    IBM PS/2 model 30 (BIOS machine type byte of FAh)
  8925.  6    IBM AT (BIOS machine type FCh)
  8926.  5    IBM PS/2 (BIOS machine type F8h)
  8927.  4    PS/2 and unknown only:
  8928.     non-standard 8042 or no AT->PC scancode translation???
  8929.  3    temporary flag???
  8930.  2-0    ???
  8931. SeeAlso: #2618
  8932.  
  8933. Format of code page table list entries:
  8934. Offset    Size    Description    (Table 2620)
  8935.  00h    WORD    pointer to next item, FFFFh = last
  8936.  02h    WORD    code page (see #1411 at INT 21/AX=6602h)
  8937.  04h  2 BYTEs    ???
  8938.  
  8939. Format of KEYB translation data:
  8940. Offset    Size    Description    (Table 2621)
  8941.  00h    WORD    size of data in bytes, including this word
  8942.  02h N-2 BYTEs    ???
  8943. --------K-2FAD80-----------------------------
  8944. INT 2F u - Novell DOS 7 KEYB.COM - INSTALLATION CHECK
  8945.     AX = AD80h
  8946. Return: AX = FFFFh if installed
  8947.         CX = Novell DOS KEYB version number (CL = major, CH = minor)
  8948.         DX = current keyboard codepage
  8949.         ES:DI -> internal data and tables (ES=FFFEh if KEYB in HMA)
  8950.     flags destroyed
  8951. Note:    versions: v2.08 (original ship 4/94), v2.09 (Update 10, 11/18/94),
  8952.       v2.10 (Update 12, 2/22/95), v2.11 (Update 13, 5/8/95),
  8953.       v2.12 (Update 14, 7/31/95)
  8954. SeeAlso: AX=AD80h"MS-DOS"
  8955. --------K-2FAD81-----------------------------
  8956. INT 2F - DOS 3.3+ KEYB.COM - SET KEYBOARD CODE PAGE
  8957.     AX = AD81h
  8958.     BX = code page (see #1411 at INT 21/AX=6601h)
  8959. Return: CF set on error
  8960.         AX = 0001h (code page not available)
  8961.     CF clear if successful
  8962. Notes:    called by DISPLAY.SYS
  8963.     this function was undocumented prior to the release of DOS 5.0
  8964. SeeAlso: AX=AD80h,AX=AD82h
  8965. --------K-2FAD82-----------------------------
  8966. INT 2F - DOS 3.3+ KEYB.COM - SET KEYBOARD MAPPING
  8967.     AX = AD82h
  8968.     BL = new state
  8969.         00h US keyboard (Control-Alt-F1)
  8970.         FFh foreign keyboard (Control-Alt-F2)
  8971. Return: CF set on error (BL not 00h or FFh)
  8972.     CF clear if successful
  8973. Note:    this function was undocumented prior to the release of DOS 5.0
  8974. SeeAlso: AX=AD80h,AX=AD81h,AX=AD83h
  8975. --------K-2FAD83-----------------------------
  8976. INT 2F - DOS 5+ KEYB.COM - GET KEYBOARD MAPPING
  8977.     AX = AD83h
  8978. Return: BL = current state
  8979.         00h US keyboard
  8980.         FFh foreign keyboard
  8981. SeeAlso: AX=AD82h
  8982. --------l-2FAE00-----------------------------
  8983. INT 2F U - DOS 3.3+ internal - INSTALLABLE COMMAND - INSTALLATION CHECK
  8984.     AX = AE00h
  8985.     DX = magic value FFFFh
  8986.     CH = FFh
  8987.     CL = length of command line tail (4DOS v4.0)
  8988.     DS:BX -> command line buffer (see #2622)
  8989.     DS:SI -> command name buffer (see #2623)
  8990.     DI = 0000h (4DOS v4.0)
  8991. Return: AL = FFh if this command is a TSR extension to COMMAND.COM
  8992.     AL = 00h if the command should be executed as usual
  8993. Notes:    This call provides a mechanism for TSRs to install permanent
  8994.       extensions to the command repertoire of COMMAND.COM.    It appears
  8995.       that COMMAND.COM makes this call before executing the current
  8996.       command line, and does not execute it itself if the return is FFh.
  8997.     APPEND hooks this call, to allow subsequent APPEND commands to
  8998.       execute without re-running APPEND
  8999. SeeAlso: AX=AE01h
  9000.  
  9001. Format of COMMAND.COM command line buffer:
  9002. Offset    Size    Description    (Table 2622)
  9003.  00h    BYTE    max length of command line, as in INT 21/AH=0Ah
  9004.  01h    BYTE    count of bytes to follow, excluding terminating 0Dh
  9005.       N BYTEs    command line text, terminated by 0Dh
  9006.  
  9007. Format of command name buffer:
  9008. Offset    Size    Description    (Table 2623)
  9009.  00h    BYTE    length of command name
  9010.  01h  N BYTEs    uppercased command name (blank-padded to 11 chars by 4DOS v4)
  9011. --------l-2FAE01-----------------------------
  9012. INT 2F U - DOS 3.3+ internal - INSTALLABLE COMMAND - EXECUTE
  9013.     AX = AE01h
  9014.     DX = magic value FFFFh
  9015.     CH = 00h
  9016.     CL = length of command name (4DOS v4.0)
  9017.     DS:BX -> command line buffer (see #2622)
  9018.     DS:SI -> command name buffer (see #2623)
  9019. Return: DS:SI buffer updated
  9020.       if length byte is nonzero, the following bytes contain the uppercase
  9021.       internal command to execute and the command line buffer contains the
  9022.       command's parameters (the first DS:[SI] bytes are ignored)
  9023. Notes:    this call requests execution of the command which a previous call to
  9024.       AX=AE00h indicated was resident
  9025.     APPEND hooks this call
  9026. BUG:    Novell DOS 7.0's COMMAND.COM (prior to Update 12) will attempt to run
  9027.       a disk program with the indicated name even if the returned length
  9028.       byte is zero, because the register used to flag this case is
  9029.       clobbered without first checking it.    The workaround is to set the
  9030.       command name buffer to "REM" followed by enough blanks to pad out
  9031.       the original command's length, which will also work with MS-DOS 6.
  9032.       (from padgett@tccslr.dnet.mmc.com)
  9033. SeeAlso: AX=AE00h
  9034. --------O-2FAF00-----------------------------
  9035. INT 2F - WinDOS v2.11 - INSTALLATION CHECK
  9036.     AX = AF00h
  9037. Return: AL = FFh if installed
  9038. Program: WinDOS is a DOS clone (claimed to be mostly MS-DOS 5.0 API compatible)
  9039.       written by Heiko Goemann
  9040. SeeAlso: AX=AF01h"WinDOS",INT 21/AH=30h
  9041. ----------2FAF00-----------------------------
  9042. INT 2F U - ???
  9043.     AX = AF00h
  9044.     ???
  9045. Return: AX = 0000h if interface supported
  9046. SeeAlso: AX=AF02h,AX=AF03h,AX=AF04h,AX=AF13h,AX=AF30h
  9047. --------O-2FAF01-----------------------------
  9048. INT 2F - WinDOS v2.11 - TURN ON ONLINE MODE
  9049.     AX = AF01h
  9050. Return: nothing
  9051. Desc:    indicate that the user will not exchange floppy disks, allowing WinDOS
  9052.       to cache disk sectors in memory and avoid writing modified sectors
  9053.       back out to the floppy disk
  9054. SeeAlso: AX=AF00h"WinDOS",AX=AF02h"WinDOS"
  9055. --------O-2FAF02-----------------------------
  9056. INT 2F - WinDOS v2.11 - TURN OFF ONLINE MODE
  9057.     AX = AF02h
  9058. Return: nothing
  9059. Desc:    indicate that the floppy disk may be removed, and that WinDOS should
  9060.       write all buffered sectors out to the floppy disk
  9061. SeeAlso: AX=AF00h"WinDOS",AX=AF01h"WinDOS"
  9062. ----------2FAF02-----------------------------
  9063. INT 2F U - ???
  9064.     AX = AF02h
  9065.     ???
  9066. Return: ES = ???
  9067. SeeAlso: AX=AF00h
  9068. --------O-2FAF03-----------------------------
  9069. INT 2F - WinDOS v2.11 - TURN VIDMEM ON
  9070.     AX = AF03h
  9071. Return: AX = status
  9072.         0000h successful
  9073.         0001h CPU not in mode set by DOS386=On
  9074.         0002h video adapter in graphics mode
  9075.         0003h memory chain corrupted
  9076. SeeAlso: AX=AF00h"WinDOS",AX=AF04h"WinDOS",AX=AF05h"WinDOS"
  9077. ----------2FAF03-----------------------------
  9078. INT 2F U - ???
  9079.     AX = AF03h
  9080.     ???
  9081. Return: DX = ???
  9082. SeeAlso: AX=AF00h
  9083. --------O-2FAF04-----------------------------
  9084. INT 2F - WinDOS v2.11 - TURN VIDMEM OFF
  9085.     AX = AF04h
  9086. Return: AX = status
  9087.         0000h successful
  9088.         0001h video memory is in use
  9089. SeeAlso: AX=AF00h"WinDOS",AX=AF03h"WinDOS",AX=AF05h"WinDOS"
  9090. ----------2FAF04-----------------------------
  9091. INT 2F U - ???
  9092.     AX = AF04h
  9093.     ???
  9094. Return: ???
  9095. SeeAlso: AX=AF00h
  9096. --------O-2FAF05-----------------------------
  9097. INT 2F - WinDOS v2.11 - GET VIDMEM STATE
  9098.     AX = AF05h
  9099. Return: AX = status (0000h off, 0001h on)
  9100. SeeAlso: AX=AF00h"WinDOS",AX=AF03h"WinDOS",AX=AF04h"WinDOS"
  9101. ----------2FAF05-----------------------------
  9102. INT 2F U - ???
  9103.     AX = AF05h
  9104.     ???
  9105. Return: ???
  9106. SeeAlso: AX=AF00h
  9107. --------O-2FAF06-----------------------------
  9108. INT 2F - WinDOS v2.11 - MAKE PROGRAM UNBREAKABLE
  9109.     AX = AF06h
  9110.     DS:DX -> break handler
  9111.     DI:BX = stack to use for break handler
  9112. Return: nothing
  9113. Desc:    set a handler which should be invoked when Ctrl-C is pressed instead of
  9114.       aborting the program
  9115. SeeAlso: AX=AF00h"WinDOS",AX=AF0Ah"WinDOS",AX=AF0Ch"WinDOS"
  9116. --------O-2FAF07-----------------------------
  9117. INT 2F - WinDOS v2.11 - SIGNAL FATAL OVERLAY FAULT
  9118.     AX = AF07h
  9119. Return: never -- system reset
  9120. Desc:    pop up a window indicating that the system overlay file can not be
  9121.       loaded
  9122. SeeAlso: AX=AF00h"WinDOS",AX=AF08h"WinDOS"
  9123. --------O-2FAF08-----------------------------
  9124. INT 2F - WinDOS v2.11 - SIGNAL RECOVERABLE OVERLAY FAULT
  9125.     AX = AF08h
  9126. Return: nothing
  9127. Desc:    pop up a window requesting that a disk containing SH.OVL be inserted
  9128. SeeAlso: AX=AF00h"WinDOS",AX=AF07h"WinDOS",AX=AF0Bh
  9129. --------O-2FAF09-----------------------------
  9130. INT 2F - WinDOS v2.11 - GET TERMINATED PSP
  9131.     AX = AF09h
  9132. Return: DS = PSP segment of most recently ended TSR
  9133. SeeAlso: AX=AF00h"WinDOS",AX=AF0Ah
  9134. --------O-2FAF0A-----------------------------
  9135. INT 2F - WinDOS v2.11 - GET MAIN SHELL PSP
  9136.     AX = AF0Ah
  9137. Return: AX = shell's PSP (same as DS on last call to AX=AF06h)
  9138. Desc:    get the PSP address of the last program to call AX=AF06h (normally
  9139.       the main command interpreter)
  9140. SeeAlso: AX=AF00h"WinDOS",AX=AF06h"WinDOS",AX=AF09h
  9141. --------O-2FAF0B-----------------------------
  9142. INT 2F - WinDOS v2.11 - SIGNAL FATAL ERROR
  9143.     AX = AF0Bh
  9144. Return: never -- system reset
  9145. Desc:    pop up a window indicating a terminal system error
  9146. SeeAlso: AX=AF00h"WinDOS",AX=AF07h,AX=AF08h,AX=AF15h"WinDOS"
  9147. --------O-2FAF0C-----------------------------
  9148. INT 2F - WinDOS v2.11 - GET OTHER MAIN SHELL PARAMETERS
  9149.     AX = AF0Ch
  9150. Return: DI:AX = stack
  9151.     SI = offset of break handler
  9152. Desc:    retrieve the parameters last set by AX=AF06h (normally by the main
  9153.       command interpreter)
  9154. SeeAlso: AX=AF00h"WinDOS",AX=AF06h"WinDOS"
  9155. --------O-2FAF0D-----------------------------
  9156. INT 2F - WinDOS v2.11 - GET CURRENT PARAMETER
  9157.     AX = AF0Dh
  9158.     BX = offset of desired parameter in global data area
  9159. Return: AX = current value of parameter (AH undefined if byte value)
  9160. SeeAlso: AX=AF00h"WinDOS",AX=AF0Eh
  9161. --------O-2FAF0E-----------------------------
  9162. INT 2F - WinDOS v2.11 - SET CURRENT PARAMETER BYTE VALUE
  9163.     AX = AF0Eh
  9164.     BX = offset of desired parameter in global data area
  9165.     DL = new value of parameter
  9166. Return: nothing
  9167. SeeAlso: AX=AF00h"WinDOS",AX=AF0Dh
  9168. --------O-2FAF0F-----------------------------
  9169. INT 2F - WinDOS v2.11 - GET HISTORY SEGMENT
  9170.     AX = AF0Fh
  9171. Return: AX = segment of buffer for input history, or 0000h if none
  9172. SeeAlso: AX=AF00h"WinDOS",AX=AF10h"WinDOS"
  9173. --------O-2FAF10-----------------------------
  9174. INT 2F - WinDOS v2.11 - SET HISTORY SEGMENT
  9175.     AX = AF10h
  9176.     BX = segment of new buffer for input history
  9177. Return: nothing
  9178. Note:    the buffer must have been allocated with INT 21/AH=48h
  9179. SeeAlso: AX=AF00h"WinDOS",AX=AF0Fh"WinDOS"
  9180. --------O-2FAF11-----------------------------
  9181. INT 2F - WinDOS v2.11 - FREE XMS BLOCKS
  9182.     AX = AF11h
  9183. Return: nothing
  9184. Desc:    free all XMS blocks whose XMS identification value (see AX=AF12h)
  9185.       equals the current PSP
  9186. SeeAlso: AX=AF00h"WinDOS",AX=AF12h"WinDOS",INT 21/AH=50h
  9187. --------O-2FAF12-----------------------------
  9188. INT 2F - WinDOS v2.11 - SET XMS IDENTIFICATION VALUE
  9189.     AX = AF12h
  9190.     DS = new XMS identification value (normally caller's PSP segment)
  9191. Return: nothing
  9192. SeeAlso: AX=AF00h"WinDOS",AX=AF11h"WinDOS"
  9193. ----------2FAF12-----------------------------
  9194. INT 2F U - ???
  9195.     AX = AF12h
  9196.     ???
  9197. Return: ES = ???
  9198. SeeAlso: AX=AF00h
  9199. --------O-2FAF13-----------------------------
  9200. INT 2F - WinDOS v2.11 - SET ASSIGN VALUE
  9201.     AX = AF13h
  9202.     BL = number of drive to remap (00h = A:)
  9203.     DL = number of drive to be accessed via drive number BL
  9204. Return: nothing
  9205. Desc:    remap a drive letter
  9206. Note:    the remapping can be canceled by specifying DL=BL
  9207. SeeAlso: AX=AF00h"WinDOS",AX=AF14h"WinDOS",AX=0601h
  9208. ----------2FAF13-----------------------------
  9209. INT 2F U - ???
  9210.     AX = AF13h
  9211.     ???
  9212. Return: ???
  9213. SeeAlso: AX=AF00h
  9214. --------O-2FAF14-----------------------------
  9215. INT 2F - WinDOS v2.11 - GET ASSIGN VALUE
  9216.     AX = AF14h
  9217.     BL = drive number (00h = A:)
  9218. Return: DL = drive number which is actually accessed by drive number BL
  9219. Desc:    determine the current mapping for a drive
  9220. SeeAlso: AX=AF00h"WinDOS",AX=AF13h"WinDOS",AX=0601h
  9221. --------O-2FAF15-----------------------------
  9222. INT 2F - WinDOS v2.11 - SIGNAL STACK ERROR
  9223.     AX = AF15h
  9224. Return: never -- system reset
  9225. Desc:    pop up a window indicating a stack overflow
  9226. SeeAlso: AX=AF00h"WinDOS",AX=AF0Bh"WinDOS"
  9227. --------O-2FAF16-----------------------------
  9228. INT 2F - WinDOS v2.11 - GET SIMPLE TRUENAME
  9229.     AX = AF16h
  9230.     DS:SI -> path to be canonicalized
  9231.     ES:DI -> buffer for canonicalized filename/pathname
  9232. Return: CF clear if successful
  9233.         AX = 0000h
  9234.     CF set on error
  9235.         AX = DOS error code (see #1332 at INT 21/AH=59h/BX=0000h)
  9236. Desc:    partially canonicalize a path, omitting SUBST, JOIN, ASSIGN, and
  9237.       network redirections
  9238. SeeAlso: AX=AF00h"WinDOS",INT 21/AH=60h
  9239. --------O-2FAF17-----------------------------
  9240. INT 2F - WinDOS v2.11 - QUERY FOR NEW CURRENT DRIVE
  9241.     AX = AF17h
  9242. Return: nothing
  9243. Desc:    pop up a dialog allowing the user to select a new default drive
  9244. SeeAlso: AX=AF00h"WinDOS"
  9245. --------O-2FAF18-----------------------------
  9246. INT 2F - WinDOS v2.11 - SET CTRL-C/CTRL-BREAK DISABLE FLAG
  9247.     AX = AF18h
  9248.     DL = new break-checking state (00h enabled, 01h disabled)
  9249. Return: nothing
  9250. SeeAlso: AX=AF00h"WinDOS"
  9251. --------O-2FAF19-----------------------------
  9252. INT 2F - WinDOS v2.11 - SET HEAD SETTLE FLAG
  9253.     AX = AF19h
  9254.     DL = new state
  9255.         00h diskette head settling time reset to 15ms before each access
  9256.         01h no additional head settling time used between accesses
  9257. Return: nothing
  9258. SeeAlso: AX=AF00h"WinDOS"
  9259. --------O-2FAF1A-----------------------------
  9260. INT 2F - WinDOS v2.11 - SEARCH FOR NON-FRAGMENTED DISK AREA
  9261.     AX = AF1Ah
  9262.     BL = drive (00h = current, 01h = A:, etc.)
  9263.     CX = number of clusters desired
  9264. Return: CF clear if successful
  9265.         DI = first free cluster on logical drive
  9266.         BP = first cluster of contiguous free area
  9267.         AX destroyed
  9268.     CF set on error
  9269.         AX = DOS error code (see #1332 at INT 21/AH=59h/BX=0000h)
  9270. Desc:    attempt to find an area of the disk containing the specified number
  9271.       of contiguous unallocated clusters
  9272. SeeAlso: AX=AF00h"WinDOS"
  9273. ----------2FAF30-----------------------------
  9274. INT 2F U - ???
  9275.     AX = AF30h
  9276.     ???
  9277. Return: ???
  9278. SeeAlso: AX=AF00h
  9279. --------d-2FAFDE-----------------------------
  9280. INT 2F - Disk-Emu - INSTALLATION CHECK / GET VERSION
  9281.     AX = AFDEh
  9282.     ES:DI -> 14-byte buffer for data (see #2624)
  9283. Return: AX = CFDEh (Carlos Fernandez Disk-Emu) if installed
  9284.         BX = version (BH = major, BL = minor)
  9285.  
  9286. Format of Disk-Emu information data:
  9287. Offset    Size    Description    (Table 2624)
  9288.  00h    BYTE    number of tracks
  9289.  01h    BYTE    sectors per track
  9290.  02h    WORD    bytes per sector
  9291.  04h    BYTE    number of heads
  9292.  05h    BYTE    flag: 00h inactive, 01h active
  9293.  06h    BYTE    write protection (00h none, 01h full, 02h pseudo)
  9294.  07h    BYTE    saved (00h some unsaved data, 01h all data saved)
  9295.  08h    BYTE    disk in memory (00h no, 01h yes)
  9296.  09h    WORD    EMS handle
  9297.  0Bh    WORD    XMS handle
  9298.  0Dh    BYTE    memory type used for disk (00h XMS, 01h EMS)
  9299. --------V-2FB000-----------------------------
  9300. INT 2F - DOS 3.3+ GRAFTABL.COM - INSTALLATION CHECK
  9301.     AX = B000h
  9302. Return: AL = status
  9303.         00h not installed, OK to install
  9304.         01h not installed, not OK to install
  9305.         FFh installed
  9306. Notes:    called by DISPLAY.SYS
  9307.     documented for DOS 5.0, but undocumented in prior versions
  9308. SeeAlso: AX=2300h,AX=2E00h,AX=B001h
  9309. --------V-2FB001-----------------------------
  9310. INT 2F - DOS 3.3+ GRAFTABL.COM - GET GRAPHICS FONT TABLE
  9311.     AX = B001h
  9312.     DS:BX -> DWORD buffer for address of 8x8 font table
  9313. Return: buffer filled
  9314.     AL = FFh
  9315. Note:    PC-DOS 3.30/4.01 and MS-DOS 6.0 set the font table offset to 0130h,
  9316.       MS-DOS 3.30 sets it to 0030h
  9317. SeeAlso: AH=2Eh"GRAFTABL",AX=B000h
  9318. --------I-2FB400-----------------------------
  9319. INT 2F - IBM PC3270 EMULATION PROG v3 - INSTALLATION CHECK
  9320.     AX = B400h
  9321. Return: AL = FFh if installed
  9322. --------I-2FB401-----------------------------
  9323. INT 2F - IBM PC3270 EMULATION PROG v3 - GET HOST BUFFER ADDRESS
  9324.     AX = B401h
  9325. Return: ES -> host screen buffer (PC ASCII format)
  9326.     ES unchanged if communications not started
  9327. --------I-2FB402-----------------------------
  9328. INT 2F - IBM PC3270 EMULATION PROG v3 - ???
  9329.     AX = B402h
  9330.     BX = ???
  9331. Return: ???
  9332. --------I-2FB403-----------------------------
  9333. INT 2F - IBM PC3270 EMULATION PROG v3 - ???
  9334.     AX = B403h
  9335.     ???
  9336. Return: ???
  9337. --------I-2FB404-----------------------------
  9338. INT 2F - IBM PC3270 EMULATION PROG v3 - ???
  9339.     AX = B404h
  9340.     ???
  9341. Return: ???
  9342. --------I-2FB405-----------------------------
  9343. INT 2F - IBM PC3270 EMULATION PROG v3 - ???
  9344.     AX = B405h
  9345.     ???
  9346. Return: ???
  9347. --------f-2FB700-----------------------------
  9348. INT 2F - APPEND - INSTALLATION CHECK
  9349.     AX = B700h
  9350. Return: AL = status
  9351.         00h not installed
  9352.         FFh installed
  9353. Note:    MS-DOS 3.30 APPEND refuses to install itself when run inside TopView or
  9354.       a TopView-compatible environment
  9355. SeeAlso: AX=B702h
  9356. --------f-2FB701-----------------------------
  9357. INT 2F U - APPEND v3.21 only - GET APPEND PATH
  9358.     AX = B701h
  9359. Return: ES:DI -> active APPEND path
  9360. Notes:    the only version of APPEND known to support this call is the APPEND
  9361.       shipped with Microtek MS-DOS 3.21; MS-DOS 3.30-6.00 APPEND displays
  9362.       "Incorrect APPEND Version" and aborts the caller
  9363.     use AX=B704h first, and only call this function if that one is not
  9364.       supported
  9365. SeeAlso: AX=B700h,AX=B704h
  9366. --------f-2FB702-----------------------------
  9367. INT 2F - APPEND - GET VERSION
  9368.     AX = B702h
  9369. Return: AX = FFFFh if not DOS 4.0 APPEND (also if DOS 5.0 APPEND)
  9370.     AL = major version number
  9371.     AH = minor version number, otherwise
  9372. SeeAlso: AX=B700h,AX=B710h
  9373. --------f-2FB703-----------------------------
  9374. INT 2F U - DOS 3.3, DOS 5.0 APPEND - HOOK INT 21
  9375.     AX = B703h
  9376.     ES:DI -> INT 21 handler APPEND should chain to
  9377. Return: ES:DI -> APPEND's INT 21 handler
  9378. Note:    each invocation of this function toggles a flag which APPEND uses to
  9379.       determine whether to chain to the user handler or the original
  9380.       INT 21
  9381. SeeAlso: AX=B700h,AX=B706h
  9382. --------f-2FB704-----------------------------
  9383. INT 2F - DOS 3.3+ APPEND - GET APPEND PATH
  9384.     AX = B704h
  9385. Return: ES:DI -> active APPEND path (128 bytes max)
  9386. Note:    some versions of append do not support this call, and return ES
  9387.       unchanged; in this case, you should call AX=B701h to get the APPEND
  9388.       path
  9389. SeeAlso: AX=B701h
  9390. --------f-2FB706-----------------------------
  9391. INT 2F - DOS 4.0+ APPEND - GET APPEND FUNCTION STATE
  9392.     AX = B706h
  9393. Return: BX = APPEND state (see #2625)
  9394. SeeAlso: AX=B700h,AX=B707h
  9395.  
  9396. Bitfields for APPEND state:
  9397. Bit(s)    Description    (Table 2625)
  9398.  0    set if APPEND enabled
  9399.  1-11    reserved
  9400.  12    (DOS 5.0) set if APPEND applies directory search even if a drive has
  9401.       been specified
  9402.  13    set if /PATH flag active
  9403.  14    set if /E flag active (environment var APPEND exists)
  9404.  15    set if /X flag active
  9405. --------f-2FB707-----------------------------
  9406. INT 2F - DOS 4.0+ APPEND - SET APPEND FUNCTION STATE
  9407.     AX = B707h
  9408.     BX = APPEND state bits (see #2625)
  9409. SeeAlso: AX=B700h,AX=B706h
  9410. --------f-2FB710-----------------------------
  9411. INT 2F U - DOS 3.3+ APPEND - GET VERSION INFO
  9412.     AX = B710h
  9413. Return: AX = current APPEND state (see #2625)
  9414.     BX = ??? (0000h in MS-DOS 3.30 and 5.00)
  9415.     CX = ??? (0000h in MS-DOS 3.30 and 5.00)
  9416.     DL = major version
  9417.     DH = minor version
  9418. SeeAlso: AX=B700h,AX=B702h
  9419. --------f-2FB711-----------------------------
  9420. INT 2F - DOS 4.0+ APPEND - SET RETURN FOUND NAME STATE
  9421.     AX = B711h
  9422. Note:    if the next INT 21h call (and ONLY the next) is function 3Dh, 43h, or
  9423.       6Ch (also 4B03h and 4Eh if /X active), the fully qualified filename
  9424.       is written over top of the filename passed to the INT 21h call.  The
  9425.       application must provide a sufficiently large buffer.     This state is
  9426.       reset after the next INT 21h call processed by APPEND.
  9427.     APPEND uses the byte at offset 3Dh in the PSP
  9428.       (see #1032 at INT 21/AH=26h) to store the flag telling it to
  9429.       overwrite the filename
  9430. BUG:    DOS 4.0 APPEND reportedly overwrites DS:DX instead of DS:SI for
  9431.       INT 21/AH=6Ch
  9432. SeeAlso: INT 21/AH=26h,INT 21/AH=4Eh
  9433. --------N-2FB800-----------------------------
  9434. INT 2F - NETWORK - INSTALLATION CHECK
  9435.     AX = B800h
  9436. Return: AL = status
  9437.         00h        not installed
  9438.         nonzero installed
  9439.           BX = installed component flags (test in this order!)
  9440.            bit 6   server
  9441.            bit 2   messenger
  9442.            bit 7   receiver
  9443.            bit 3   redirector
  9444.            bit 1   LANPUP (LANtastic 4.0)
  9445. Notes:    this function is supported by PC LAN Program, LAN Manager, LANtastic,
  9446.       NetWare Lite, SilverNET, 10NET, etc.
  9447.     LANtastic and NetWare Lite use only BL for the return value, preserving
  9448.       BH; LAN Manager and DOS LAN Requester return BH=00h.    This permits
  9449.       differentiation between those two groups by setting BH to a nonzero
  9450.       value before the call and checking its value on return.
  9451. SeeAlso: AX=4E53h,AX=B809h
  9452. --------N-2FB800CXF041-----------------------
  9453. INT 2F - 10NET - INSTALLATION CHECK
  9454.     AX = B800h
  9455.     CX = F041h
  9456. Return: AL = status
  9457.         00h        not installed
  9458.         nonzero installed
  9459.         BX = installed component flags (test in this order!)
  9460.            bit 6   server
  9461.            bit 2   messenger
  9462.            bit 7   receiver
  9463.            bit 3   redirector
  9464.            bit 1   LANPUP (LANtastic 4.0)
  9465.         CX = 10Net data segment
  9466.         CX:DX -> 10Net Configuration Table
  9467.               (see #1343 at INT 21/AX=5E01h"10NET")
  9468. Note:    if CX <> F041h on entry, neither CX nor DX will be changed, and this
  9469.       call becomes identical to the standard installation check above
  9470. SeeAlso: AX=B800h"network",INT 21/AX=5E01h"10NET"
  9471. --------N-2FB803-----------------------------
  9472. INT 2F - NETWORK - GET NETWORK EVENT POST HANDLER
  9473.     AX = B803h
  9474. Return: ES:BX -> current event post handler (see AX=B804h)
  9475. Note:    this function is supported by PC LAN Program, 10NET v5.0,
  9476.       NetSoft DOS-NET v1.20+
  9477. SeeAlso: AX=B800h,AX=B804h,AX=B903h
  9478. --------N-2FB804-----------------------------
  9479. INT 2F - NETWORK - SET NETWORK EVENT POST HANDLER
  9480.     AX = B804h
  9481.     CX = (10NET) 0370h if 10Windows is hooking post handler
  9482.     ES:BX -> new event post handler (see #2626)
  9483. Notes:    used in conjunction with AX=B803h to hook into the network event post
  9484.       routine
  9485.     this function is supported by PC LAN Program, 10NET v5.0,
  9486.       NetSoft DOS-NET v1.20+
  9487.     The specified handler is called on any network event.  Two events are
  9488.       defined: message received and critical network error.
  9489. SeeAlso: AX=B800h,AX=B803h,AX=B904h
  9490.  
  9491. (Table 2626)
  9492. Values network post routine is called with:
  9493.     AX = 0000h single block message
  9494.         DS:SI -> ASCIZ originator name
  9495.         DS:DI -> ASCIZ destination name
  9496.         ES:BX -> text header (see #2627)
  9497.     AX = 0001h start multiple message block
  9498.         CX = block group ID
  9499.         DS:SI -> ASCIZ originator name
  9500.         DS:DI -> ASCIZ destination name
  9501.     AX = 0002h multiple block text
  9502.         CX = block group ID
  9503.         ES:BX -> text header (see #2627)
  9504.     AX = 0003h end multiple block message
  9505.         CX = block group ID
  9506.     AX = 0004h message aborted due to error
  9507.         CX = block group ID
  9508.     AX = 0101h server received badly formatted network request
  9509.         Return: AX = FFFFh (PC LAN will process error)
  9510.     AX = 0102h unexpected network error
  9511.         ES:BX -> NCB (see #2881 at INT 5C"NetBIOS")
  9512.     AX = 0103h server received INT 24 error
  9513.         other registers as for INT 24, except AH is in BH
  9514.         Return: as below, but only 0000h and FFFFh allowed
  9515. Return: AX = response code
  9516.         0000h user post routine processed message
  9517.         0001h PC LAN will process message, but message window not displayed
  9518.         FFFFh PC LAN will process message
  9519.  
  9520. Format of text header:
  9521. Offset    Size    Description    (Table 2627)
  9522.  00h    WORD    length of text (maximum 512 bytes)
  9523.  02h  N BYTEs    text of message
  9524. Note:    all CRLF sequences in message text are replaced by 14h; all other
  9525.       values below 20h (space) are reserved
  9526. --------N-2FB807-----------------------------
  9527. INT 2F - NETWORK - GET NetBIOS NAME NUMBER OF MACHINE NAME
  9528.     AX = B807h
  9529. Return: CH = NetBIOS name number of the machine name
  9530. SeeAlso: INT 21/AX=5E00h
  9531. --------N-2FB808-----------------------------
  9532. INT 2F U - NETWORK - RELINK KEYBOARD HANDLER
  9533.     AX = B808h
  9534.     ES:BX -> INT 09 handler network should call after it finishes INT 09
  9535. Notes:    this call replaces the address to which the network software chains on
  9536.       an INT 09 without preserving the original value.  This allows a prior
  9537.       handler to unlink, but does not allow a new handler to be added
  9538.       such that the network gets the INT 09 first unless the new handler
  9539.       completely takes over INT 09 and never chains.
  9540.     this function is called by the DOS 3.2 KEYBxx.COM
  9541. SeeAlso: AX=B908h
  9542. --------N-2FB809-----------------------------
  9543. INT 2F - NETWORK - LANtastic, NetWare Lite - GET VERSION
  9544.     AX = B809h
  9545. Return: AH = major version
  9546.     AL = minor version (decimal)
  9547. Notes:    this function is supported in this form by LANtastic, NetWare Lite,
  9548.       SilverNET, ...
  9549.     NetWare Lite returns its own version number rather than a PC LAN
  9550.       compatibility version
  9551. SeeAlso: AX=4E53h,AX=B800h,AX=B809h"PC LAN Program"
  9552. --------N-2FB809-----------------------------
  9553. INT 2F - NETWORK - PC LAN Program - GET VERSION
  9554.     AX = B809h
  9555. Return: AH = minor version (decimal)
  9556.     AL = major version
  9557. Notes:    this function is supported in this form by PC LAN Program, LAN Manager,
  9558.       the DOS LAN Requester, and 10NET v5.0
  9559.     10NET returns version 1.10 (AX=0A01h) for compatibility
  9560. SeeAlso: AX=4E53h,AX=B800h,AX=B809h"LANtastic"
  9561. --------N-2FB80A-----------------------------
  9562. INT 2F u - PC Network 1.00 - ???
  9563.     AX = B80Ah
  9564.     ???
  9565. Return: ???
  9566. Program: PC Network is an early networking package which was renamed the
  9567.       IBM PC Local Area Network Program (PC LAN Program) as of v1.10
  9568. Note:    called by RECEIVER (equivalent to NetWare Lite SERVER)
  9569. --------N-2FB80E-----------------------------
  9570. INT 2F U - DOS LAN Requester - GET XSI2 ADDRESS / DATA
  9571.     AX = B80Eh
  9572. Return: DS:DI -> XSI2 TSR's resident data (see #2628)
  9573. Note:    this function is used by NET.COM to locate the USERID and DOMAIN of
  9574.       the logged-in user (which may differ from the NET START domain
  9575.       name from DOSLAN.INI which is returned by AX=B80Fh)
  9576. SeeAlso: AX=B800h,AX=B80Fh
  9577.  
  9578. Format of XSI2 resident data:
  9579. Offset    Size    Description    (Table 2628)
  9580.  00h 254 BYTEs    ???
  9581.  FEh 10 BYTEs    user ID 1
  9582. 108h 10 BYTEs    user ID 2
  9583. 112h 10 BYTEs    domain name 1
  9584. 11Ch 10 BYTEs    domain name 2
  9585. 126h  ? BYTEs    domain controller
  9586. --------N-2FB80F-----------------------------
  9587. INT 2F - DOS LAN Requester - GET START PARAMETERS
  9588.     AX = B80Fh
  9589.     CX = size of return data buffer
  9590.     ES:DI -> return data buffer (see #2629)
  9591. Return: AX = status
  9592.          00h     network started
  9593.          nonzero network not started
  9594.     CX = number of bytes returned in buffer
  9595.     ES:DI buffer filled
  9596. SeeAlso: AX=B809h"PC LAN Program",AX=B80Eh
  9597.  
  9598. Format of DOS LAN Requester return data buffer:
  9599. Offset    Size    Description    (Table 2629)
  9600.  00h    BYTE    major version
  9601.  01h    BYTE    minor version
  9602.  02h    WORD    configuration flags given when network was started (see #2630)
  9603.  04h 15 BYTEs    NET START machine name (space padded)
  9604.  13h    BYTE    00h
  9605.  14h 9    BYTEs    NET START domain name (NULL padded)
  9606.  1Dh    BYTE    00h
  9607.  1Eh 32 BYTEs    /WRK heuristics string (space padded, not terminated)
  9608.  3Eh    WORD    /SRV value
  9609.  40h    WORD    /ASG value
  9610.  42h    WORD    /NBC value
  9611.  44h    WORD    /NBS value
  9612.  46h    WORD    /BBC value
  9613.  48h    WORD    /BBS value
  9614.  4Ah    WORD    /PBC value
  9615.  4Ch    WORD    /PBS value
  9616.  4Eh    WORD    /PFS value
  9617.  50h    WORD    /PFT value
  9618.  52h    WORD    /PWT value
  9619.  54h    WORD    /KUC value
  9620.  56h    WORD    /KST value
  9621.  58h    WORD    /NVS value
  9622.  5Ah    WORD    /NMS value
  9623.  5Ch    WORD    /NDB value
  9624.  5Eh    WORD    /MBI value
  9625.  60h    BYTE    NetBIOS name number for machine name
  9626.  61h    BYTE    NetBIOS name number for domain name
  9627.  62h    WORD    NetBIOS sessions required for configuration
  9628.  64h    WORD    NetBIOS commands required for configuration
  9629.  66h    WORD    NetBIOS names required for configuration
  9630.  68h 128 BYTEs    NET START path (LANROOT)
  9631.  E8h    BYTE    00h
  9632.  
  9633. Bitfields for configuration flags:
  9634. Bit(s)    Description    (Table 2630)
  9635.  0    /NVS nonzero
  9636.  1    /NMS nonzero
  9637.  2    /API
  9638.  3    /HIM
  9639.  4    /LIM
  9640.  5    /ENC
  9641.  6    /POP
  9642.  7    /EMS
  9643.  8    /RPL
  9644.  9-12    reserved
  9645.  13    RDR started
  9646.  14    RCV started
  9647.  15    User is currently logged on
  9648. --------N-2FB900-----------------------------
  9649. INT 2F - PC Network RECEIVER.COM - INSTALLATION CHECK
  9650.     AX = B900h
  9651. Return: AL = state
  9652.         00h if not installed
  9653.         FFh if installed
  9654. --------N-2FB901-----------------------------
  9655. INT 2F - PC Network RECEIVER.COM - GET RECEIVER.COM INT 2F HANDLER ADDRESS
  9656.     AX = B901h
  9657. Return: AL = ???
  9658.     ES:BX -> RECEIVER.COM INT 2F handler
  9659. Desc:    allows more efficient execution by letting the caller bypass any other
  9660.       INT 2F handlers which have been added since RECEIVER.COM was
  9661.       installed
  9662. --------N-2FB903-----------------------------
  9663. INT 2F - PC Network RECEIVER.COM - GET RECEIVER.COM POST ADDRESS
  9664.     AX = B903h
  9665. Return: ES:BX -> POST handler
  9666. SeeAlso: AX=B803h,AX=B904h
  9667. --------N-2FB904-----------------------------
  9668. INT 2F - PC Network RECEIVER.COM - SET RECEIVER.COM POST ADDRESS
  9669.     AX = B904h
  9670.     ES:BX -> new POST handler
  9671. SeeAlso: AX=B804h,AX=B903h
  9672. --------N-2FB905-----------------------------
  9673. INT 2F - PC Network RECEIVER.COM - GET FILENAME
  9674.     AX = B905h
  9675.     DS:BX -> 128-byte buffer for filename 1
  9676.     DS:DX -> 128-byte buffer for filename 2
  9677. Return: buffers filled from RECEIVER.COM internal buffers
  9678. Note:    use of filenames is unknown, but one appears to be for storing messages
  9679. SeeAlso: AX=B906h
  9680. --------N-2FB906-----------------------------
  9681. INT 2F - PC Network RECEIVER.COM - SET FILENAME
  9682.     AX = B906h
  9683.     DS:BX -> 128-byte buffer for filename 1
  9684.     DS:DX -> 128-byte buffer for filename 2
  9685. Return: RECEIVER.COM internal buffers filled from user buffers
  9686. Note:    use of filenames is unknown, but one appears to be for storing messages
  9687. SeeAlso: AX=B905h
  9688. --------N-2FB908-----------------------------
  9689. INT 2F - PC Network RECEIVER.COM - UNLINK KEYBOARD HANDLER
  9690.     AX = B908h
  9691.     ES:BX -> INT 09 handler RECEIVER should call after it finishes INT 09
  9692. Note:    this call replaces the address to which RECEIVER.COM chains on an
  9693.       INT 09 without preserving the original value.     This allows a prior
  9694.       handler to unlink, but does not allow a new handler to be added
  9695.       such that RECEIVER gets the INT 09 first.
  9696. SeeAlso: AX=B808h
  9697. --------V-2FBC00-----------------------------
  9698. INT 2F - Windows 3.0, DOS 5+ EGA.SYS - INSTALLATION CHECK
  9699.     AX = BC00h
  9700. Return: AL = state
  9701.         00h not installed, OK to install
  9702.         01h not installed, not OK to install
  9703.         FFh installed
  9704.         BX = 5456h ("TV")
  9705. Range:    AH=80h to AH=FFh, selected by commandline switch
  9706. SeeAlso: AX=BC06h"EGA",INT 10/AH=FAh"EGA"
  9707. --------s-2FBC00BX3F3F-----------------------
  9708. INT 2F - MediaVision MVSOUND.SYS - INSTALLATION CHECK
  9709.     AX = BC00h
  9710.     BX = 3F3Fh ('??')
  9711.     CX = 0000h
  9712.     DX = 0000h
  9713. Return: if installed, BX XOR CX XOR DX = 4D56h ('MV')
  9714. Program: MVSOUND.SYS is a driver for the MediaVision ProAudio Spectrum family
  9715.       of sound boards; its primary programmer was Bryan Crane
  9716. SeeAlso: AX=BC01h"MVSOUND",AX=BC02h,AX=BC03h,AX=BC04h,AX=BC06h"MVSOUND"
  9717. --------s-2FBC01-----------------------------
  9718. INT 2F - MediaVision MVSOUND.SYS - GET VERSION
  9719.     AX = BC01h
  9720.     BX = magic value 6D20h ('m ')
  9721.     CX = magic value 2076h (' v')
  9722.     DX = magic value 2020h ('  ')
  9723. Return: BX = ASCII major version (leading zeros significant)
  9724.     CX = ASCII minor version (leading zeros significant)
  9725. SeeAlso: AX=BC00h/BX=3F3Fh
  9726. --------s-2FBC02-----------------------------
  9727. INT 2F - MediaVision MVSOUND.SYS - GET STATE TABLE POINTER
  9728.     AX = BC02h
  9729. Return: BX:DX -> state table
  9730. SeeAlso: AX=BC00h/BX=3F3Fh,AX=BC03h
  9731. --------s-2FBC03-----------------------------
  9732. INT 2F - MediaVision MVSOUND.SYS - GET FUNCTION TABLE POINTER
  9733.     AX = BC03h
  9734. Return: BX:DX -> function table
  9735. SeeAlso: AX=BC00h/BX=3F3Fh,AX=BC02h
  9736. --------s-2FBC04-----------------------------
  9737. INT 2F - MediaVision MVSOUND.SYS - GET DMA AND IRQ CHANNELS
  9738.     AX = BC04h
  9739. Return: AX = 4D56h ('MV')
  9740.     BL = DMA channel
  9741.     CL = IRQ number
  9742. SeeAlso: AX=BC00h/BX=3F3Fh,AX=BC01h"MVSOUND"
  9743. --------V-2FBC06-----------------------------
  9744. INT 2F U - MS Windows 3.0, DOS 5+ EGA.SYS - GET VERSION INFO
  9745.     AX = BC06h
  9746. Return: BX = 5456h ("TV")
  9747.     CH = major version
  9748.     CL = minor version
  9749.     DL = revision
  9750. SeeAlso: AX=BC00h"EGA",INT 10/AH=FAh"EGA"
  9751. --------s-2FBC06-----------------------------
  9752. INT 2F - MediaVision MVSOUND.SYS - GET STATUS STRING
  9753.     AX = BC06h
  9754. Return: AX = 4D56h ('MV')
  9755.     DX:BX -> status string (first byte 0Ch if no status message to display)
  9756. SeeAlso: AX=BC00h/BX=3F3Fh,AX=BC01h"MVSOUND",AX=BC0Bh"MVSOUND"
  9757. --------s-2FBC0B-----------------------------
  9758. INT 2F - MediaVision MVSOUND.SYS - GET EXECUTABLE PATH
  9759.     AX = BC0Bh
  9760. Return: BX:DX -> ASCIZ path for MVPROAS.EXE, 0000h:0000h if not available
  9761. SeeAlso: AX=BC00h/BX=3F3Fh
  9762. --------U-2FBE00-----------------------------
  9763. INT 2F - REDVIEW - INSTALLATION CHECK
  9764.     AX = BE00h
  9765. Return: AL = FFh if installed
  9766. Program: REDVIEW is a public-domain TSR by Alexandr Novy and Petr Horak which
  9767.       copies data sent to standard output to standard error when the
  9768.       former has been redirected to a file, thus allowing the data to
  9769.       be seen on the screen at the same time it is captured in a file
  9770. --------N-2FBF00-----------------------------
  9771. INT 2F - PC LAN PROGRAM REDIRIFS.EXE internal - INSTALLATION CHECK
  9772.     AX = BF00h
  9773. Return: AL = FFh if installed
  9774. Note:    this function is also supported by NetSoft's DOS-NET v1.20+; however,
  9775.       none of the remaining BFxxh calls are supported
  9776. SeeAlso: AX=BF01h,AX=BF80h,INT 2A/AX=4147h
  9777. --------N-2FBF01-----------------------------
  9778. INT 2F U - PC LAN PROGRAM REDIRIFS.EXE internal - ???
  9779.     AX = BF01h
  9780.     ???
  9781. Return: ???
  9782. SeeAlso: AX=BF00h
  9783. --------N-2FBF80-----------------------------
  9784. INT 2F - PC LAN PROG REDIR.SYS internal - SET REDIRIFS ENTRY POINT
  9785.     AX = BF80h
  9786.     ES:DI -> FAR entry point to IFS handler in REDIRIFS
  9787. Return: AL = FFh if installed
  9788.         ES:DI -> internal workspace
  9789. Note:    all future IFS calls to REDIR.SYS are passed to the ES:DI entry point
  9790. SeeAlso: AX=BF00h
  9791. --------!---Section--------------------------
  9792.